JMS實現參數的集中式管理【面試+工作】

前言

JMS的發佈訂閱機制也能實現類似的功能,集羣節點通過訂閱指定的節點,同時使用jms對消息的過濾器功能,實現對指定參數的更新,本文將介紹通過JMS實現簡單的參數集中式管理。

Maven引入

Spring相關的jar引入

目標

1.可以同時配置監聽多個節點如/app1,/app2;

2.希望只需要配置如/app1,就能夠監聽其子節點如/app1/modual1以及子節點的子節點如/app1/modual1/xxx/…;

3.服務器啓動能獲取當前指定父節點下的所有子節點數據;

4.在添加節點或者在更新節點數據的時候能夠動態通知,這樣代碼中就能夠實時獲取最新的數據;

5.spring配置中可以從Zookeeper中讀取參數進行初始化。

雖然在實現的方式上有點區別,但是最終達成的目標是一致的,同樣列出了這5條目標

實現

MQWatcher主要用來和JMS建立連接,同時訂閱指定節點,建立點對點連接,過濾出需要監聽的數據,更新數據,初始化數據,存儲數據等

InitConfServer主要作爲點對點連接的服務器端用來初始化數據

1.同時配置監聽多個節點

提供一個字符串數組給用戶用來添加需要監聽的節點:

2.能夠監聽其子節點以及子節點的子節點

使用了一種和Zookeeper不一樣的方式,JMS的方式是將所有的數據變更都發送到訂閱者,然後訂閱者通過過濾出需要的數據進行更新

對TOPIC進行了訂閱,並且指定了過濾器keyFilter,keyFilter正是基於keyPatterns組裝而成的

對指定的屬性IDENTIFIER,通過LIKE和OR關鍵字進行過濾

3.服務器啓動初始化節點數據

通過點對點的方式,在服務器啓動時通過請求響應模式來獲取初始化數據

通過對指定QUEUE請求,同時建立一個臨時的響應QUEUE,然後接受一個MapMessage,用來初始化keyValueMap

4.監聽節點數據的變更

通過發佈訂閱模式,接受所有數據,然後進行過濾,目標2中已經有相關實現

5.spring配置中可以從Zookeeper中讀取參數進行初始化

通過以上的處理,可以使用如下簡單的配置來達到目標:

測試

1.啓動ActiveMQ

2.InitConfServer啓動

用來監聽集羣節點的初始化請求,獲取到集羣節點發送來的keyPatterns,然後將符合其模式的數據封裝成MapMessage發送給集羣節點

以上代碼只是進行了簡單的模擬,提供了一個思路

3.啓動Main類

4.啓動TopicPublisher

定時發佈數據,同時查看集羣節點的Main類日誌輸出

日誌輸出如下:

詳細代碼svn地址:http://code.taobao.org/svn/temp-pj/DynamicConf

總結

通過JMS實現了一個簡單的參數化平臺系統,當然想在生產中使用還有很多需要優化的地方,本文在於提供一個思路;後續有時間準備對DynamicConf提供更加完善的方案。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章