Nacos(十二)之Java SDK
轉(zhuǎn)載自??Java SDK
概述部分
Maven 坐標
<dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>${version}</version> </dependency>配置管理
獲取配置
描述
用于服務(wù)啟動的時候從 Nacos 獲取配置。
public String getConfig(String dataId, String group, long timeoutMs) throws NacosException請求參數(shù)
| dataId | string | 配置 ID,采用類似 package.class(如com.taobao.tc.refund.log.level)的命名規(guī)則保證全局唯一性,class 部分建議是配置的業(yè)務(wù)含義。全部字符小寫。只允許英文字符和 4 種特殊字符("."、":"、"-"、"_"),不超過 256 字節(jié)。 |
| group | string | 配置分組,建議填寫產(chǎn)品名:模塊名(Nacos:Test)保證唯一性,只允許英文字符和4種特殊字符("."、":"、"-"、"_"),不超過128字節(jié)。 |
| timeout | long | 讀取配置超時時間,單位 ms,推薦值 3000。 |
返回值
| string | 配置值 |
請求示例
try {String serverAddr = "{serverAddr}";String dataId = "{dataId}";String group = "{group}";Properties properties = new Properties();properties.put("serverAddr", serverAddr);ConfigService configService = NacosFactory.createConfigService(properties);String content = configService.getConfig(dataId, group, 5000);System.out.println(content); } catch (NacosException e) {// TODO Auto-generated catch blocke.printStackTrace(); }異常說明
讀取配置超時或網(wǎng)絡(luò)異常,拋出 NacosException 異常。
監(jiān)聽配置
描述
如果希望 Nacos 推送配置變更,可以使用 Nacos 動態(tài)監(jiān)聽配置接口來實現(xiàn)。
public void addListener(String dataId, String group, Listener listener)請求參數(shù)
| 參數(shù)名 | 參數(shù)類型 | 描述 |
| dataId | string | 配置 ID,采用類似 package.class(如com.taobao.tc.refund.log.level)的命名規(guī)則保證全局唯一性,class 部分建議是配置的業(yè)務(wù)含義。 全部字符小寫。只允許英文字符和 4 種特殊字符("."、":"、"-"、"_")。不超過 256 字節(jié)。 |
| group | string | 配置分組,建議填寫產(chǎn)品名:模塊名(如 Nacos:Test)保證唯一性。 只允許英文字符和4種特殊字符("."、":"、"-"、"_"),不超過128字節(jié)。 |
| listener | Listener | 監(jiān)聽器,配置變更進入監(jiān)聽器的回調(diào)函數(shù)。 |
返回值
| string | 配置值,初始化或者配置變更的時候通過回調(diào)函數(shù)返回該值。 |
請求示例
String serverAddr = "{serverAddr}"; String dataId = "{dataId}"; String group = "{group}"; Properties properties = new Properties(); properties.put("serverAddr", serverAddr); ConfigService configService = NacosFactory.createConfigService(properties); String content = configService.getConfig(dataId, group, 5000); System.out.println(content); configService.addListener(dataId, group, new Listener() {@Overridepublic void receiveConfigInfo(String configInfo) {System.out.println("recieve1:" + configInfo);}@Overridepublic Executor getExecutor() {return null;} });// 測試讓主線程不退出,因為訂閱配置是守護線程,主線程退出守護線程就會退出。 正式代碼中無需下面代碼 while (true) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} }刪除監(jiān)聽
描述
取消監(jiān)聽配置,取消監(jiān)聽后配置不會再推送。
public void removeListener(String dataId, String group, Listener listener)請求參數(shù)
| dataId | string | 配置 ID,采用類似 package.class(如com.taobao.tc.refund.log.level)的命名規(guī)則保證全局唯一性,class 部分建議是配置的業(yè)務(wù)含義。全部字符小寫。只允許英文字符和 4 種特殊字符("."、":"、"-"、"_"),不超過 256 字節(jié)。 |
| group | string | 配置分組 |
| listener | ConfigChangeListenerAdapter | 監(jiān)聽器,配置變更進入監(jiān)聽器的回調(diào)函數(shù)。 |
使用示例
String serverAddr = "{serverAddr}"; String dataId = "{dataId}"; String group = "{group}"; Properties properties = new Properties(); properties.put("serverAddr", serverAddr); ConfigService configService = NacosFactory.createConfigService(properties); configService.removeListener(dataId, group, yourListener);發(fā)布配置
描述
用于通過程序自動發(fā)布 Nacos 配置,以便通過自動化手段降低運維成本。
__注意:__創(chuàng)建和修改配置時使用的同一個發(fā)布接口,當配置不存在時會創(chuàng)建配置,當配置已存在時會更新配置。
public boolean publishConfig(String dataId, String group, String content) throws NacosException;@Since 1.4.1 public boolean publishConfig(String dataId, String group, String content, String type) throws NacosException;請求參數(shù)
| dataId | string | 配置 ID,采用類似?package.class(如?com.taobao.tc.refund.log.level)的命名規(guī)則保證全局唯一性。建議根據(jù)配置的業(yè)務(wù)含義來定義 class 部分。全部字符均為小寫。只允許英文字符和 4 種特殊字符(“.”、“:”、“-”、“_”),不超過 256 字節(jié)。 |
| group | string | 配置分組,建議填寫產(chǎn)品名:模塊名(如 Nacos:Test)來保證唯一性。只允許英文字符和 4 種特殊字符(“.”、“:”、“-”、“_”),不超過 128 字節(jié)。 |
| content | string | 配置內(nèi)容,不超過 100K 字節(jié)。 |
| type | string | @Since 1.4.1. 配置類型,見?com.alibaba.nacos.api.config.ConfigType,默認為TEXT |
返回參數(shù)
| boolean | 是否發(fā)布成功 |
請求示例
try {// 初始化配置服務(wù),控制臺通過示例代碼自動獲取下面參數(shù)String serverAddr = "{serverAddr}";String dataId = "{dataId}";String group = "{group}";Properties properties = new Properties();properties.put("serverAddr", serverAddr);ConfigService configService = NacosFactory.createConfigService(properties);boolean isPublishOk = configService.publishConfig(dataId, group, "content");System.out.println(isPublishOk); } catch (NacosException e) {// TODO Auto-generated catch blocke.printStackTrace(); }異常說明
讀取配置超時或網(wǎng)絡(luò)異常,拋出 NacosException 異常。
刪除配置
描述
用于通過程序自動刪除 Nacos 配置,以便通過自動化手段降低運維成本。
注意:?當配置已存在時會刪除該配置,當配置不存在時會直接返回成功消息。
public boolean removeConfig(String dataId, String group) throws NacosException請求參數(shù)
| dataId | string | 配置 ID |
| group | string | 配置分組 |
返回參數(shù)
| boolean | 是否刪除成功 |
請求示例
try {// 初始化配置服務(wù),控制臺通過示例代碼自動獲取下面參數(shù)String serverAddr = "{serverAddr}";String dataId = "{dataId}";String group = "{group}";Properties properties = new Properties();properties.put("serverAddr", serverAddr);ConfigService configService = NacosFactory.createConfigService(properties);boolean isRemoveOk = configService.removeConfig(dataId, group);System.out.println(isRemoveOk); } catch (NacosException e) {// TODO Auto-generated catch blocke.printStackTrace(); }異常說明
讀取配置超時或網(wǎng)絡(luò)異常,拋出 NacosException 異常。
服務(wù)發(fā)現(xiàn)SDK
注冊實例
描述注冊一個實例到服務(wù)。
void registerInstance(String serviceName, String ip, int port) throws NacosException;void registerInstance(String serviceName, String ip, int port, String clusterName) throws NacosException;void registerInstance(String serviceName, Instance instance) throws NacosException;請求參數(shù)
| serviceName | 字符串 | 服務(wù)名 |
| ip | 字符串 | 服務(wù)實例IP |
| port | int | 服務(wù)實例port |
| clusterName | 字符串 | 集群名 |
| instance | 參見代碼注釋 | 實例屬性 |
返回參數(shù)
無
請求示例
NamingService naming = NamingFactory.createNamingService(System.getProperty("serveAddr")); naming.registerInstance("nacos.test.3", "11.11.11.11", 8888, "TEST1");Instance instance = new Instance(); instance.setIp("55.55.55.55"); instance.setPort(9999); instance.setHealthy(false); instance.setWeight(2.0); Map<String, String> instanceMeta = new HashMap<>(); instanceMeta.put("site", "et2"); instance.setMetadata(instanceMeta);Service service = new Service("nacos.test.4"); service.setApp("nacos-naming"); service.sethealthCheckMode("server"); service.setEnableHealthCheck(true); service.setProtectThreshold(0.8F); service.setGroup("CNCF"); Map<String, String> serviceMeta = new HashMap<>(); serviceMeta.put("symmetricCall", "true"); service.setMetadata(serviceMeta); instance.setService(service);Cluster cluster = new Cluster(); cluster.setName("TEST5"); AbstractHealthChecker.Http healthChecker = new AbstractHealthChecker.Http(); healthChecker.setExpectedResponseCode(400); healthChecker.setCurlHost("USer-Agent|Nacos"); healthChecker.setCurlPath("/xxx.html"); cluster.setHealthChecker(healthChecker); Map<String, String> clusterMeta = new HashMap<>(); clusterMeta.put("xxx", "yyyy"); cluster.setMetadata(clusterMeta);instance.setCluster(cluster);naming.registerInstance("nacos.test.4", instance);注銷實例
描述
刪除服務(wù)下的一個實例。
void deregisterInstance(String serviceName, String ip, int port) throws NacosException;void deregisterInstance(String serviceName, String ip, int port, String clusterName) throws NacosException;請求參數(shù)
| serviceName | 字符串 | 服務(wù)名 |
| ip | 字符串 | 服務(wù)實例IP |
| port | int | 服務(wù)實例port |
| clusterName | 字符串 | 集群名 |
返回參數(shù)
無
請求示例
NamingService naming = NamingFactory.createNamingService(System.getProperty("serveAddr")); naming.deregisterInstance("nacos.test.3", "11.11.11.11", 8888, "DEFAULT");獲取全部實例
描述
獲取服務(wù)下的所有實例。
List<Instance> getAllInstances(String serviceName) throws NacosException;List<Instance> getAllInstances(String serviceName, List<String> clusters) throws NacosException;請求參數(shù)
| serviceName | 字符串 | 服務(wù)名 |
| clusters | List | 集群列表 |
返回參數(shù)
List?實例列表。
請求示例
NamingService naming = NamingFactory.createNamingService(System.getProperty("serveAddr")); System.out.println(naming.getAllInstances("nacos.test.3"));獲取健康或不健康實例列表
描述
根據(jù)條件獲取過濾后的實例列表。
List<Instance> selectInstances(String serviceName, boolean healthy) throws NacosException;List<Instance> selectInstances(String serviceName, List<String> clusters, boolean healthy) throws NacosException;請求參數(shù)
| serviceName | 字符串 | 服務(wù)名 |
| clusters | List | 集群列表 |
| healthy | boolean | 是否健康 |
返回參數(shù)
List?實例列表。
請求示例
NamingService naming = NamingFactory.createNamingService(System.getProperty("serveAddr")); System.out.println(naming.selectInstances("nacos.test.3", true));獲取一個健康實例
描述
根據(jù)負載均衡算法隨機獲取一個健康實例。
Instance selectOneHealthyInstance(String serviceName) throws NacosException;Instance selectOneHealthyInstance(String serviceName, List<String> clusters) throws NacosException;請求參數(shù)
| serviceName | 字符串 | 服務(wù)名 |
| clusters | List | 集群列表 |
返回參數(shù)
Instance 實例。
請求示例
NamingService naming = NamingFactory.createNamingService(System.getProperty("serveAddr")); System.out.println(naming.selectOneHealthyInstance("nacos.test.3"));監(jiān)聽服務(wù)
描述
監(jiān)聽服務(wù)下的實例列表變化。
void subscribe(String serviceName, EventListener listener) throws NacosException;void subscribe(String serviceName, List<String> clusters, EventListener listener) throws NacosException;請求參數(shù)
| serviceName | 字符串 | 服務(wù)名 |
| clusters | List | 集群列表 |
| listener | EventListener | 回調(diào)listener |
返回參數(shù)
無
請求示例
NamingService naming = NamingFactory.createNamingService(System.getProperty("serveAddr")); naming.subscribe("nacos.test.3", event -> {if (event instanceof NamingEvent) {System.out.println(((NamingEvent) event).getServceName());System.out.println(((NamingEvent) event).getInstances());} });取消監(jiān)聽服務(wù)
描述
取消監(jiān)聽服務(wù)下的實例列表變化。
void unsubscribe(String serviceName, EventListener listener) throws NacosException;void unsubscribe(String serviceName, List<String> clusters, EventListener listener) throws NacosException;請求參數(shù)
| serviceName | 字符串 | 服務(wù)名 |
| clusters | List | 集群列表 |
| listener | EventListener | 回調(diào)listener |
返回參數(shù)
無
請求示例
NamingService naming = NamingFactory.createNamingService(System.getProperty("serveAddr")); naming.unsubscribe("nacos.test.3", event -> {});總結(jié)
以上是生活随笔為你收集整理的Nacos(十二)之Java SDK的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nacos(十一)之NacosSync
- 下一篇: java美元兑换,(Java实现) 美元