XXL-REGISTRY 是一個輕量級分佈式服務註冊中心,擁有"輕量級、秒級註冊上線、多環境、跨語言、跨機房"等特性。現已開放源代碼,開箱即用。html
源碼倉庫地址 | Release Download |
---|---|
https://github.com/xuxueli/xxl-registry | Download |
https://gitee.com/xuxueli0323/xxl-registry | Download |
請下載項目源碼並解壓,獲取 "服務註冊中心" 數據庫初始化SQL腳本並執行便可java
數據庫初始化SQL腳本位置爲:mysql
/xxl-registry/doc/db/xxl-registry-mysql.sql
"服務註冊中心" 支持集羣部署,集羣狀況下各節點務必鏈接同一個mysql實例;nginx
解壓源碼,按照maven格式將源碼導入IDE, 使用maven進行編譯便可,源碼結構以下:git
- /doc - /xxl-registry-admin :分佈式服務中心 - /xxl-registry-client :客戶端核心依賴;
配置文件地址:github
/xxl-registry/xxl-registry-admin/src/main/resources/application.properties
消息中心配置內容說明:spring
### 數據庫配置 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl-registry?Unicode=true&characterEncoding=UTF-8 ### 服務註冊數據磁盤同步目錄 xxl.registry.data.filepath=/data/applogs/xxl-registry/registrydata ### 登錄信息配置 xxl.registry.login.username=admin xxl.registry.login.password=123456
若是已經正確進行上述配置,可將項目編譯打包部署。
訪問地址:http://localhost:8080/xxl-registry-admin (該地址接入方項目將會使用到,做爲註冊地址),登陸後運行界面以下圖所示sql
至此「服務註冊中心」項目已經部署成功。docker
服務註冊中心支持集羣部署,提高消息系統容災和可用性。數據庫
集羣部署時,幾點要求和建議:
// Docker地址:https://hub.docker.com/r/xuxueli/xxl-registry-admin/ docker pull xuxueli/xxl-registry-admin
docker run -p 8080:8080 -v /tmp:/data/applogs --name xxl-registry-admin -d xuxueli/xxl-registry-admin /** * 如需自定義 mysql 等配置,可經過 "PARAMS" 指定,參數格式 RAMS="--key=value --key2=value2" ; * 配置項參考文件:/xxl-registry/xxl-registry-admin/src/main/resources/application.properties */ docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl-registry?Unicode=true&characterEncoding=UTF-8" -p 8080:8080 -v /tmp:/data/applogs --name xxl-registry-admin -d xuxueli/xxl-registry-admin
XXL-RPC默認將 "XXL-REGISTRY" 做爲原生註冊中心。可前往 XXL-RPC (https://github.com/xuxueli/xxl-rpc ) 示例項目參考如何接入 "XXL-REGISTRY" 。
客戶端maven依賴地址:
<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-registry-client</artifactId> <version>${最新穩定版}</version> </dependency>
其餘Java服務框架,能夠藉助原生提供的客戶端JAR包快速接入使用,建議參考 XXL-RPC 提供的實例項目;
客戶端JAR包內封裝了與註冊中心API服務交互的客戶端代碼,原生提供兩個客戶端類供實用:
客戶端API實用示例代碼以下:
// 註冊中心客戶端(基礎類) XxlRegistryBaseClient registryClient = new XxlRegistryBaseClient("http://localhost:8080/xxl-registry-admin/", null, "xxl-rpc", "test"); // 註冊中心客戶端(加強類) XxlRegistryClient registryClient = new XxlRegistryClient("http://localhost:8080/xxl-registry-admin/", null, "xxl-rpc", "test"); // 服務註冊 & 續約: List<XxlRegistryDataParamVO> registryDataList = new ArrayList<>(); registryDataList.add(new XxlRegistryDataParamVO("service01", "address01")); registryDataList.add(new XxlRegistryDataParamVO("service02", "address02")); registryClient.registry(registryDataList); // 服務摘除: List<XxlRegistryDataParamVO> registryDataList = new ArrayList<>(); registryDataList.add(new XxlRegistryDataParamVO("service01", "address01")); registryDataList.add(new XxlRegistryDataParamVO("service02", "address02")); registryClient.remove(registryDataList); // 服務發現: Set<String> keys = new TreeSet<>(); keys.add("service01"); keys.add("service02"); Map<String, TreeSet<String>> serviceData = registryClient.discovery(keys); // 服務監控: Set<String> keys = new TreeSet<>(); keys.add("service01"); keys.add("service02"); registryClient.monitor(keys);
其餘Java服務框架,如dubbo、springboot等,接入 "XXL-REGISTRY" 的示例項目,後續將會整理推出。
非Java語言項目,能夠藉助提供的 RESTFUL 格式API接口實現服務註冊與發現功能。
參考章節 "3、註冊中心API服務"
服務註冊中心爲支持服務註冊與發現功能,提供的 RESTFUL 格式API接口以下:
說明:新服務註冊上線1s內廣播通知接入方;須要接入方循環續約,不然服務將會過時(三倍於註冊中心心跳時間)下線;
地址格式:{服務註冊中心跟地址}/registry 請求參數說明: 一、accessToken:請求令牌; 二、biz:業務標識 二、env:環境標識 三、registryDataList:服務註冊信息 請求數據格式以下,放置在 RequestBody 中,JSON格式: { "accessToken" : "xx", "biz" : "xx", "env" : "xx", "registryDataList" : [{ "key" : "service01", "value" : "address01" }] }
說明:新服務摘除下線1s內廣播通知接入方;
地址格式:{服務註冊中心跟地址}/remove 請求參數說明: 一、accessToken:請求令牌; 二、biz:業務標識 二、env:環境標識 三、registryDataList:服務註冊信息 請求數據格式以下,放置在 RequestBody 中,JSON格式: { "accessToken" : "xx", "biz" : "xx", "env" : "xx", "registryDataList" : [{ "key" : "service01", "value" : "address01" }] }
說明:查詢在線服務地址列表;
地址格式:{服務註冊中心跟地址}/discovery 請求參數說明: 一、accessToken:請求令牌; 二、biz:業務標識 二、env:環境標識 三、keys:服務註冊Key列表 請求數據格式以下,放置在 RequestBody 中,JSON格式: { "accessToken" : "xx", "biz" : "xx", "env" : "xx", "keys" : [ "service01", "service02" ] }
說明:long-polling 接口,主動阻塞一段時間(三倍於註冊中心心跳時間);直至阻塞超時或服務註冊信息變更時響應;
地址格式:{服務註冊中心跟地址}/monitor 請求參數說明: 一、accessToken:請求令牌; 二、biz:業務標識 二、env:環境標識 三、keys:服務註冊Key列表 請求數據格式以下,放置在 RequestBody 中,JSON格式: { "accessToken" : "xx", "biz" : "xx", "env" : "xx", "keys" : [ "service01", "service02" ] }
XXL-REGISTRY內部經過廣播機制,集羣節點實時同步服務註冊信息,確保一致。客戶端藉助 long pollong 實時感知服務註冊信息,簡潔、高效;
得益於服務註冊中心集羣關係對等特性,集羣各節點提供冪等的服務註冊服務;所以,異地跨機房部署時,只須要請求本機房服務註冊中心便可,實現異地多活;
舉個例子:好比機房A、B 內分別部署服務註冊中心集羣節點。即機房A部署 a一、a2 兩個服務註冊中心服務節點,機房B部署 b一、b2 兩個服務註冊中心服務節點;
那麼各機房內應用只須要請求本機房內部署的服務註冊中心節點便可,不須要跨機房調用。即機房A內業務應用請求 a一、a2 獲取配置、機房B內業務應用 b一、b2 獲取配置。
這種跨機房部署方式實現了配置服務的 "異地多活",擁有如下幾點好處:
相似 Raft 方案,更輕量級、穩定;
歡迎參與項目貢獻!好比提交PR修復一個bug,或者新建 Issue 討論新特性或者變動。
更多接入的公司,歡迎在 登記地址 登記,登記僅僅爲了產品推廣。
產品開源免費,而且將持續提供免費的社區技術支持。我的或企業內部可自由的接入和使用。
不管金額多少都足夠表達您這份心意,很是感謝 :) 前往捐贈