国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Nacos系列:Nacos的Java SDK使用

LinkedME2016 / 559人閱讀

摘要:發(fā)布配置支持程序自動(dòng)發(fā)布配置,創(chuàng)建和修改配置使用同一個(gè)方法,配置不存在則創(chuàng)建配置已存在則更新。示例源碼項(xiàng)目代碼已上傳至碼云和上,歡迎下載學(xué)習(xí)參考資料用戶指南的推薦閱讀系列歡迎來(lái)到的世界系列基于的注冊(cè)中心系列基于的配置中心

Maven依賴

Nacos提供完整的Java SDK,便于配置管理和服務(wù)發(fā)現(xiàn)及管理,以 Nacos-0.8.0 版本為例

添加Maven依賴:


    com.alibaba.nacos
    nacos-client
    0.8.0

僅僅引入nacos-client是不夠的,否則啟動(dòng)時(shí)會(huì)出現(xiàn)如下錯(cuò)誤:

sun.misc.Launcher$AppClassLoader@18b4aac2 JM.Log:WARN Init JM logger with NopLoggerFactory, pay attention. sun.misc.Launcher$AppClassLoader@18b4aac2
java.lang.ClassNotFoundException: org.apache.logging.log4j.core.Logger
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at com.alibaba.nacos.client.logger.log4j2.Log4j2LoggerFactory.(Log4j2LoggerFactory.java:33)
    at com.alibaba.nacos.client.logger.LoggerFactory.(LoggerFactory.java:59)
    at com.alibaba.nacos.client.config.utils.LogUtils.(LogUtils.java:49)
    at com.alibaba.nacos.client.config.NacosConfigService.(NacosConfigService.java:55)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at com.alibaba.nacos.api.config.ConfigFactory.createConfigService(ConfigFactory.java:40)
    at com.alibaba.nacos.api.config.ConfigFactory.createConfigService(ConfigFactory.java:59)
    at com.alibaba.nacos.api.NacosFactory.createConfigService(NacosFactory.java:52)
    at com.learn.nacos.config.NacosConfig.main(NacosConfig.java:12)

根據(jù)錯(cuò)誤提示,應(yīng)該還需要添加log4j相關(guān)依賴,官網(wǎng)的文檔并沒(méi)有對(duì)此說(shuō)明,我在pom.xml添加了下面這些依賴才不報(bào)錯(cuò)


    ch.qos.logback
    logback-classic
    1.1.11


    org.logback-extensions
    logback-ext-spring
    0.1.4


    org.slf4j
    jcl-over-slf4j
    1.7.25


    log4j
    log4j
    1.2.17


    org.slf4j
    slf4j-api
    1.7.25
配置管理

創(chuàng)建ConfigService,可以通過(guò) NacosFactory.createConfigService()ConfigFactory.createConfigService() 來(lái)創(chuàng)建,后者是前者的底層實(shí)現(xiàn)方式,這兩種方式都包含如下兩個(gè)方法:
createConfigService(serverAddr)
createConfigService(properties)

創(chuàng)建示例:

// 方式一
String serverAddr = "127.0.0.1:8848";
ConfigService configService = ConfigFactory.createConfigService(serverAddr);

// 方式二
ConfigService configService = ConfigFactory.createConfigService(properties)
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);

查看ConfigService源碼,它提供了如下方法:

獲取 Nacos Server 當(dāng)前狀態(tài)String getServerStatus()
底層源碼:

public String getServerStatus() {
    if (worker.isHealthServer()) {
        return "UP";
    } else {
        return "DOWN";
    }
}
根據(jù)源碼注釋,該狀態(tài)應(yīng)該是指 Nacos Server 的狀態(tài),我把 Nacos Server 關(guān)閉之后,再次運(yùn)行示例,得到的結(jié)果仍然是UP,不知道這是不是一個(gè)BUG。

發(fā)布配置boolean publishConfig(String dataId, String group, String content) throws NacosException
支持程序自動(dòng)發(fā)布Nacos配置,創(chuàng)建和修改配置使用同一個(gè)方法,配置不存在則創(chuàng)建;配置已存在則更新。

底層源碼:

try {
    result = agent.httpPost(url, headers, params, encode, POST_TIMEOUT);
} catch (IOException ioe) {
    log.warn("NACOS-0006",
        LoggerHelper.getErrorCodeStr("NACOS", "NACOS-0006", "環(huán)境問(wèn)題", "[publish-single] exception"));
    log.warn(agent.getName(), "[publish-single] exception, dataId={}, group={}, msg={}", dataId, group,
        ioe.toString());
    return false;
}
發(fā)布配置后,如果馬上用getConfig()讀取配置,有時(shí)候會(huì)讀不到,設(shè)置了足夠的等待時(shí)長(zhǎng)后才可保證每次正常讀取,看了源碼才知道Nacos的配置管理(發(fā)布、讀取、移除)都是通過(guò)HTTP接口完成的,但發(fā)布配置的時(shí)延是多少,官網(wǎng)似乎沒(méi)有說(shuō)明?幾秒鐘的時(shí)延在一些對(duì)實(shí)時(shí)性要求很高的場(chǎng)景會(huì)不會(huì)存在影響呢?

讀取配置String getConfig(String dataId, String group, long timeoutMs) throws NacosException
timeoutMs指讀取配置超時(shí)時(shí)間,官網(wǎng)推薦設(shè)置為3000ms

底層源碼:

// 優(yōu)先使用本地配置
String content = LocalConfigInfoProcessor.getFailover(agent.getName(), dataId, group, tenant);
if (content != null) {
    log.warn(agent.getName(), "[get-config] get failover ok, dataId={}, group={}, tenant={}, config={}", dataId,
        group, tenant, ContentUtils.truncateContent(content));
    cr.setContent(content);
    configFilterChainManager.doFilter(null, cr);
    content = cr.getContent();
    return content;
}

try {
    content = worker.getServerConfig(dataId, group, tenant, timeoutMs);

    cr.setContent(content);
    configFilterChainManager.doFilter(null, cr);
    content = cr.getContent();

    return content;
} catch (NacosException ioe) {
    if (NacosException.NO_RIGHT == ioe.getErrCode()) {
        throw ioe;
    }
    log.warn("NACOS-0003",
        LoggerHelper.getErrorCodeStr("NACOS", "NACOS-0003", "環(huán)境問(wèn)題", "get from server error"));
    log.warn(agent.getName(), "[get-config] get from server error, dataId={}, group={}, tenant={}, msg={}",
        dataId, group, tenant, ioe.toString());
}
從源碼上看,配置會(huì)先從本地緩存文件讀取,如果沒(méi)讀取到,才會(huì)去請(qǐng)求Nacos Server的配置,這個(gè)緩存文件在哪呢?就在當(dāng)前用戶的nacos目錄下
生成的緩存文件:nacos/config/fixed-127.0.0.1_8848_nacos/snapshot/DEFAULT_GROUP/nacos-sdk-java-config,配置內(nèi)容和發(fā)布到Nacos Server的配置內(nèi)容是一致的。

移除配置boolean removeConfig(String dataId, String group) throws NacosException
支持程序自動(dòng)發(fā)布Nacos配置,配置不存在時(shí)會(huì)直接返回成功,移除配置后,本地的緩存文件也會(huì)被刪除

底層源碼:

try {
    result = agent.httpDelete(url, null, params, encode, POST_TIMEOUT);
} catch (IOException ioe) {
    log.warn("[remove] error, " + dataId + ", " + group + ", " + tenant + ", msg: " + ioe.toString());
    return false;
}
移除配置同發(fā)布配置一樣,如果移除后馬上查詢,有可能還能將剛移除的配置查出來(lái),也存在一定的時(shí)延,需要設(shè)置等待時(shí)間讀取。

添加配置監(jiān)聽(tīng)void addListener(String dataId, String group, Listener listener) throws NacosException
支持動(dòng)態(tài)監(jiān)聽(tīng)配置的變化,運(yùn)行示例源碼,在Nacos控制臺(tái)把配置內(nèi)容修改為sdk-java-config:change from nacos console,此時(shí)觀看IDE控制臺(tái),你會(huì)看到如下打印信息:

當(dāng)前線程:com.alibaba.nacos.client.Worker.longPollingfixed-127.0.0.1_8848 ,監(jiān)聽(tīng)到配置內(nèi)容變化:sdk-java-config:change from nacos console

移除配置監(jiān)聽(tīng)void removeListener(String dataId, String group, Listener listener)
移除監(jiān)聽(tīng)后,配置的變化不會(huì)再監(jiān)聽(tīng)

啟動(dòng)完整示例,運(yùn)行結(jié)果如下,請(qǐng)注意配置監(jiān)聽(tīng)線程和配置管理線程不是同一個(gè)線程

當(dāng)前線程:main ,服務(wù)狀態(tài):UP
添加監(jiān)聽(tīng)
添加監(jiān)聽(tīng)成功
發(fā)布配置
發(fā)布配置成功
當(dāng)前線程:com.alibaba.nacos.client.Worker.longPollingfixed-127.0.0.1_8848 ,監(jiān)聽(tīng)到配置內(nèi)容變化:nacos-sdk-java-config:init
當(dāng)前線程:main ,發(fā)布配置后獲取配置內(nèi)容:nacos-sdk-java-config:init
重新發(fā)布配置
重新發(fā)布配置成功
當(dāng)前線程:main ,重新發(fā)布配置后獲取配置內(nèi)容:sdk-java-config:update
當(dāng)前線程:com.alibaba.nacos.client.Worker.longPollingfixed-127.0.0.1_8848 ,監(jiān)聽(tīng)到配置內(nèi)容變化:sdk-java-config:update
當(dāng)前線程:com.alibaba.nacos.client.Worker.longPollingfixed-127.0.0.1_8848 ,監(jiān)聽(tīng)到配置內(nèi)容變化:sdk-java-config:change from nacos console
移除配置
移除配置成功
當(dāng)前線程:main ,移除配置后獲取配置內(nèi)容:null
取消監(jiān)聽(tīng)
取消監(jiān)聽(tīng)成功
服務(wù)管理

創(chuàng)建NamingService,可以通過(guò) NacosFactory.createNamingService()NamingFactory.createNamingService() 來(lái)創(chuàng)建,后者是前者的底層實(shí)現(xiàn)方式,這兩種方式都包含如下兩個(gè)方法:
createNamingService(serverAddr)
createNamingService(properties)

創(chuàng)建示例:

// 方式一
String serverAddr = "127.0.0.1:8848";
NamingService namingService = NamingFactory.createNamingService(serverAddr);

// 方式二
NamingService namingService = NamingFactory.createNamingService(properties)
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);

查看NamingService類源碼,它提供了如下方法:

獲取 Nacos Server 當(dāng)前狀態(tài)String getServerStatus()

注冊(cè)服務(wù)實(shí)例void registerInstance(多個(gè)參數(shù))

方式一:
String serverIp = "127.0.0.1";
int serverPort = 8848;
String serverAddr = serverIp + ":" + serverPort;
String serviceName = "nacos-sdk-java-discovery";
NamingService namingService = NamingFactory.createNamingService(serverAddr);
namingService.registerInstance(serviceName, serverIp, serverPort);

方式二:
Instance instance = new Instance();
instance.setIp(serverIp);//IP
instance.setPort(serverPort);//端口
instance.setServiceName(serviceName);//服務(wù)名
instance.setEnabled(true);//true: 上線 false: 下線
instance.setHealthy(healthy);//健康狀態(tài)
instance.setWeight(1.0);//權(quán)重
instance.addMetadata("nacos-sdk-java-discovery", "true");//元數(shù)據(jù)
NamingService namingService = NamingFactory.createNamingService(serverAddr);
namingService.registerInstance(serviceName, instance);
注冊(cè)后,本地會(huì)生成緩存文件
1、在Nacos安裝目錄data目錄下:data/naming/data/public/com.alibaba.nacos.naming.domains.meta.public##nacos-sdk-java-discovery
2、當(dāng)前用戶的nacos目錄下:/nacos/naming/public/failover/nacos-sdk-java-discovery
3、當(dāng)前用戶的nacos目錄下:/nacos/naming/public/nacos-sdk-java-discovery

即使刪除服務(wù)實(shí)例,上面三個(gè)緩存文件也不會(huì)被刪除,Nacos控制臺(tái)服務(wù)列表中該服務(wù)也還存在著(但服務(wù)實(shí)例數(shù)會(huì)變成0);刪除Nacos控制臺(tái)的該服務(wù),安全目錄data目錄下的緩存文件會(huì)被刪除,但當(dāng)前用戶的nacos目錄下的文件不會(huì)被刪除,這里面是什么機(jī)制,我暫時(shí)還沒(méi)整明白,等后面整明白了再來(lái)補(bǔ)充。

刪除服務(wù)實(shí)例void deregisterInstance(多個(gè)參數(shù))

獲取所有服務(wù)實(shí)例List getAllInstances(多個(gè)參數(shù))

獲取所有健康或不健康的服務(wù)實(shí)例List selectInstances(多個(gè)參數(shù))

隨機(jī)獲取一個(gè)健康實(shí)例(根據(jù)負(fù)載均衡算法)Instance selectOneHealthyInstance(多個(gè)參數(shù))

添加服務(wù)實(shí)例監(jiān)聽(tīng)void subscribe(多個(gè)參數(shù))

添加服務(wù)實(shí)例監(jiān)聽(tīng)void unsubscribe(多個(gè)參數(shù))

分頁(yè)獲取所有服務(wù)實(shí)例ListView getServicesOfServer(多個(gè)參數(shù))

獲取所有監(jiān)聽(tīng)的服務(wù)實(shí)例List getSubscribeServices()

啟動(dòng)完整示例,運(yùn)行結(jié)果如下,請(qǐng)注意服務(wù)實(shí)例監(jiān)聽(tīng)線程和服務(wù)實(shí)例管理線程不是同一個(gè)線程

當(dāng)前線程:main ,服務(wù)狀態(tài):UP
注冊(cè)實(shí)例
注冊(cè)實(shí)例成功
添加監(jiān)聽(tīng)
添加監(jiān)聽(tīng)成功
當(dāng)前線程:main ,注冊(cè)實(shí)例后獲取所有實(shí)例:[{"clusterName":"DEFAULT","enabled":true,"instanceId":"127.0.0.1#8848#DEFAULT#nacos-sdk-java-discovery","ip":"127.0.0.1","metadata":{},"port":8848,"serviceName":"nacos-sdk-java-discovery","valid":true,"weight":1.0}]
當(dāng)前線程:main ,注冊(cè)實(shí)例后獲取所有健康實(shí)例:[{"clusterName":"DEFAULT","enabled":true,"instanceId":"127.0.0.1#8848#DEFAULT#nacos-sdk-java-discovery","ip":"127.0.0.1","metadata":{},"port":8848,"serviceName":"nacos-sdk-java-discovery","valid":true,"weight":1.0}]
當(dāng)前線程:com.alibaba.nacos.naming.client.listener ,監(jiān)聽(tīng)到實(shí)例名稱:nacos-sdk-java-discovery
當(dāng)前線程:com.alibaba.nacos.naming.client.listener ,監(jiān)聽(tīng)到實(shí)例內(nèi)容:[{"clusterName":"DEFAULT","enabled":true,"instanceId":"127.0.0.1#8848#DEFAULT#nacos-sdk-java-discovery","ip":"127.0.0.1","metadata":{},"port":8848,"serviceName":"nacos-sdk-java-discovery","valid":true,"weight":1.0}]
當(dāng)前線程:main ,注冊(cè)實(shí)例后獲取一個(gè)健康實(shí)例:{"clusterName":"DEFAULT","enabled":true,"instanceId":"127.0.0.1#8848#DEFAULT#nacos-sdk-java-discovery","ip":"127.0.0.1","metadata":{},"port":8848,"serviceName":"nacos-sdk-java-discovery","valid":true,"weight":1.0}
當(dāng)前線程:com.alibaba.nacos.naming.client.listener ,監(jiān)聽(tīng)到實(shí)例名稱:nacos-sdk-java-discovery
當(dāng)前線程:com.alibaba.nacos.naming.client.listener ,監(jiān)聽(tīng)到實(shí)例內(nèi)容:[{"clusterName":"DEFAULT","enabled":true,"instanceId":"127.0.0.1#8848#DEFAULT#nacos-sdk-java-discovery","ip":"127.0.0.1","metadata":{"change":"true;"},"port":8848,"serviceName":"nacos-sdk-java-discovery","valid":true,"weight":2.0}]
取消監(jiān)聽(tīng)
取消監(jiān)聽(tīng)成功
刪除實(shí)例
刪除實(shí)例成功
Exception in thread "main" java.lang.IllegalStateException: no host to srv for serviceInfo: nacos-sdk-java-discovery
    at com.alibaba.nacos.client.naming.core.Balancer$RandomByWeight.selectAll(Balancer.java:45)
    at com.alibaba.nacos.client.naming.core.Balancer$RandomByWeight.selectHost(Balancer.java:53)
    at com.alibaba.nacos.client.naming.NacosNamingService.selectOneHealthyInstance(NacosNamingService.java:270)
    at com.alibaba.nacos.client.naming.NacosNamingService.selectOneHealthyInstance(NacosNamingService.java:263)
    at com.alibaba.nacos.client.naming.NacosNamingService.selectOneHealthyInstance(NacosNamingService.java:253)
    at com.learn.nacos.discovery.NacosDiscovery.main(NacosDiscovery.java:121)
當(dāng)前線程:main ,刪除實(shí)例后獲取所有實(shí)例:[]
當(dāng)前線程:main ,刪除實(shí)例后獲取所有健康實(shí)例:[]

以上就是 Nacos Java SDK 配置管理和服務(wù)管理功能的介紹,請(qǐng)參考示例源碼學(xué)習(xí)。

示例源碼

項(xiàng)目:learn-nacos-sdk-java

代碼已上傳至碼云Github上,歡迎下載學(xué)習(xí)

Gitee

Github

參考資料

Nacos用戶指南:Java的SDK

推薦閱讀

Nacos系列:歡迎來(lái)到Nacos的世界!

Nacos系列:基于Nacos的注冊(cè)中心

Nacos系列:基于Nacos的配置中心

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/73379.html

相關(guān)文章

  • Nacos系列Nacos三種部署模式

    摘要:數(shù)據(jù)源內(nèi)嵌的數(shù)據(jù)庫(kù),通過(guò)命令直接啟動(dòng)即可,無(wú)需額外安裝。參考資料部署手冊(cè)集群部署說(shuō)明推薦閱讀系列歡迎來(lái)到的世界系列基于的注冊(cè)中心系列基于的配置中心系列的使用 三種部署模式 Nacos支持三種部署模式 1、單機(jī)模式:可用于測(cè)試和單機(jī)使用,生產(chǎn)環(huán)境切忌使用單機(jī)模式(滿足不了高可用) 2、集群模式:可用于生產(chǎn)環(huán)境,確保高可用 3、多集群模式:可用于多數(shù)據(jù)中心場(chǎng)景 單機(jī)模式 啟動(dòng) Nacos ...

    vibiu 評(píng)論0 收藏0
  • Nacos系列:歡迎來(lái)到Nacos世界!

    摘要:元數(shù)據(jù)數(shù)據(jù)如配置和服務(wù)描述信息,如服務(wù)版本權(quán)重容災(zāi)策略負(fù)載均衡策略鑒權(quán)配置各種自定義標(biāo)簽,從作用范圍來(lái)看,分為服務(wù)級(jí)別的元信息集群的元信息及實(shí)例的元信息。 什么是Nacos? Nacos 是構(gòu)建以服務(wù)為中心的現(xiàn)代應(yīng)用架構(gòu) (例如微服務(wù)范式、云原生范式) 的服務(wù)基礎(chǔ)設(shè)施。 Nacos可以做什么? 1、動(dòng)態(tài)配置服務(wù):支持以中心化、外部化和動(dòng)態(tài)化的方式管理所有環(huán)境的配置。動(dòng)態(tài)配置消除了配置變...

    waruqi 評(píng)論0 收藏0
  • Nacos(一):Nacos介紹

    摘要:年月阿里巴巴高級(jí)技術(shù)專家許真恩慕義發(fā)布了首個(gè)開(kāi)源版本,作為的開(kāi)源實(shí)現(xiàn)截止目前已經(jīng)更新到了的大版本,并且支持大規(guī)模生產(chǎn)版本。支持目前幾乎所有主流的微服務(wù)生態(tài)體系。 前言 6月份阿里開(kāi)源的Nacos出了1.0.1版本,從去年7月份第一個(gè)release版本到現(xiàn)在一直在默默關(guān)注 官方的版本規(guī)劃為:Nacos從0.8.0開(kāi)始支持生產(chǎn)可用,1.0版本可大規(guī)模生產(chǎn)可用,2.0版本接入k8s、Spri...

    NicolasHe 評(píng)論0 收藏0
  • Nacos系列:基于Nacos配置中心

    摘要:殺只雞而已,你拿牛刀來(lái)做甚釋義小團(tuán)隊(duì)小項(xiàng)目選擇簡(jiǎn)單的配置管理方式就好了,要什么配置中心,純屬?zèng)]事找事。,我就啰嗦到這里吧,下面正式介紹作為配置中心是怎么使用的。 前言 在看正文之前,我想請(qǐng)你回顧一下自己待過(guò)的公司都是怎么管理配置的,我想應(yīng)該會(huì)有以下幾種方式: 1、硬編碼沒(méi)有什么配置不配置的,直接寫(xiě)在代碼里面,比如使用常量類優(yōu)勢(shì):對(duì)開(kāi)發(fā)友好,開(kāi)發(fā)清楚地知道代碼需要用到什么配置劣勢(shì):涉及秘...

    ralap 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<