Meteor-zookeeper使用說明書
項目地址:
Meteor-zookeeper-core https://github.com/18106960985/meteor-zookeeper 是一個對zookeeper操作的集成方案,其核心設計目的 - 對內高對內聚、無入侵, 採用fastjson序列化與反序列化,內置了數據本地緩存,實現節點監聽
對外開箱即用、易擴展、輕量級,提供豐富API方法,它可以幫助你快速的管理zookeeper。
Meteor-zookeeper-admin 採用了居說是最新的前端技術棧的 vue-element-ui 這裏就不做更多闡述,在需要自定義UI的情況下請自行查看該項目說明
縮略圖
目錄
3.5. Initializer (Curator實例) 6
3.6. TreeCacheInitialize (ZNode監聽器) 6
當你的應用程序以分佈式的形式被實現的時候,服務之間的錯誤和競爭是不可避免的,這使得它們在變化的存在下變得十分脆弱並難以管理,及時正確的執行了,這些服務也會應爲管理的複雜性而增加不必要的精力,那麼爲什麼不將這些交給Zookeeper?它能提供:維護配置信息,域名服務,分佈式同步和組服務!
curator-web用於獲取服務不同環境下的配置信息,對數據進行本地化並保證其數據與服務器同步,web上提供了可視化操作管理ZK,減少了部署時候修改配置的操作以及配置信息同步
Znode的結構是一個類似文件目錄的樹結構
下列縮略語適用於本文件。
ZK——分佈式協調應用(Zookeeper)
WEB——Zookeeper 視圖管理工具(Admin-we)
CORE——核心依賴JAR。(Zk-core)
UI——前端視圖文件(admin-zookeeper-ui)
存儲在Znode上的數據類型對應見 表 1:
表 1 數據類型 |
||
數據類型 |
示例 |
描述及要求 |
MAP |
Key1=value Key2=value |
key = value 格式,鍵值對之間使用換行符進行拆分 |
LIST |
1 2 3 |
數組之間使用換行符進行拆分 |
STRING |
string字符串 |
UTF8 編碼,若無數據,置空 其他基本類型一致 |
YAML |
#zk 的目錄監聽 |
請使用yml格式 |
PROPERTIES
|
Key2.xxx=value |
請使用properties文件格式 |
JSON |
{key : value} |
請使用json 數據格式 |
core是分佈式集羣服務依賴jar
Maven引入
<dependency>
<groupId>meteor-curator</groupId>
<artifactId>curator-core</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
API簡介見 表 1:
表 1 API簡介 |
|
類名 |
描述 |
ZKUtil |
提供基礎的增刪改查方法,包含持久化操作 |
ZKNode |
znode數據模型 |
Initializer |
Curator clinet實例 |
TreeCacheInitialize |
zNode 監聽實例,需要要配置config/spring/zk.yml |
AppConfig |
對外提供的接口方法 |
ZkUtils 封裝了對zk的具體操作方法,該操作都會將數據保存至磁盤 說明見表2:
表 2 ZkUtils主要方法 |
|
方法 |
描述及參數說明 |
tree |
獲取znode 樹形結構模型 (path 可選節點,null默認爲根節點) |
setData |
新增或者修改節點數據 (Path 節點 data 節點數據) |
getData |
獲取zk節點值 (path 節點路徑) |
remove |
移除zk節點 path節點 |
getYml |
封裝了getData方法,獲取節點數據並轉換成yml 對象 |
示例:
//該方法能獲取整個znode 並且會緩存在本地磁盤
ZKNode zkNode = ZKUtil.tree(null);
//該方法能獲取到存儲在zookeeper 的yml格式數據對象
Yaml ymlConfig = ZKUtil.getYaml("/xxxx", Yaml.class);
//setData 方法能改變ZK服務上的節點數據 ,
String path ="/module/admin/urls";
//這是一個map類型 的數據結構
String data = "maven=http//:maven.test.net.cn:88";
ZKUtil.setData(path,data);
AppConfig 在ZKUtils的基礎上提供給對外的接口,並提供更多複合類型的轉換 見表3
表 3 AppConfig |
|
方法 |
描述及參數說明 |
getItemValue |
獲取zk的節點數據優先從緩存中讀取 (key 節點路徑 ,clazz 返回的類型 包含基本類型以及MAP LIST 和bean類) |
getProp |
獲取zk的節點的properties 數據優先從緩存中讀取 (key 節點路徑 ,clazz 返回 類型) |
getMap |
獲取zk的節點的Map數據優先從緩存中讀取 (key 節點路徑 ,clazz 返回 類型) |
getJson |
獲取zk的節點的JSON數據優先從緩存中讀取 (key 節點路徑 ,clazz 返回 類型) |
示例:
String path ="/module/admin/urls";
//默認返回String 類型
String str = AppConfig.getItemValue(path);
//選擇返回Map類型
Map<String,String> params = AppConfig.getItemValue(path,Map.class);
zk-core與ZK交互是採用了TCP協議。Initializer是curator client的實例
Initializer是curator client的生命週期控制類 表 1:
表 1 Initializer |
|
方法 |
描述及要求 |
init |
建立連接並獲得到zookeeper實例 |
close |
關閉連接 |
reInit |
Client 重啓 |
詳細請看代碼
當ZK服務器更改數據的時候,我們需要監聽變動並及時更新 treeCache做的就是這件事情。默認不啓用
要求: 啓用需要引入meteor.yml 請放置在resource下
配置示例:
#zk監聽配置 注意!!該數據格式爲數組形式
rootPath:
#監聽根節點 監聽全部子節點
- /
#監聽test 及test全部子節點
- /test
說明:
ZK_ROOT_PATHS 是配置的屬性KEY ,其數據是爲數組類型
Admin-Zookeeper-ui是使用開源項目vue-element-admin搭建,使用的是以vue爲主體技術的vue-element-ui組件。
Admin-Zookeeper-ui 主要組件說明見表1
表 1 主要組件 |
|
組件 |
描述及使用到的地方 |
axios |
VUE所推薦的類ajax請求組件,負責HTTP協議請求。 |
Vue-router |
針對前端的路徑路由組件,與axios實現動態路由,以及前端路由攔截器。 |
Vuex |
vue的全局變量,與cookies結合實現多種狀態管理 |