解決 spring cloud 中 c.a.n.client.config.impl.ClientWorker 瘋狂打印問題


為了以后工程遷移到nacos 上, 今天建了一個nacos+spring cloud 測試案例工程。

先說一下為什么使用spring cloud 而不是使用spring boot ,因為是要和feignClient 做集成,如果使用spring boot ,feignclient對服務的負責均衡和注入就要自己實現了。為了偷懶就直接那spring cloud.

首先服務引用了關於nacos的jar包:

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>

nacos服務器上簡單配置了一個簡單的配置文件之后,服務就起來
起起來沒問題,但是:

如圖所示,200ms每次,瘋狂刷新,循環拉取nacos配置文件,這個太不正常了,

然后在網上看了關於這個clientWorker打印的問題,幾乎都是說是服務器的版本和客戶端的版本不一致導致,我查了一下,我使用的都是1.4.1最新版本,沒有問題,然后是不是配置的問題,不知道,在nacos官網上也找不到答案,那就只能自己查了。

然后查看debug + 源碼,發現了了問題:

如圖所示,cacheMap緩存了兩個配置信息,但是我確實只配置了一個,就是providor一個配置文件,然后每次通過http調用回來的結果也證實了一點,如下圖:

確實只有一個providor 文件,但是為什么會緩存了兩個呢,導致每次都不一樣,然后就會陷入死循環,一直在拿文件。
繼續查找源碼,最后在 spring-cloud-starter-alibaba-nacos-config-2.2.5.RELEASE.jar 包中
找到了com.alibaba.cloud.nacos.client.NacosPropertySourceLocator 這個類

在這個方法中,就根據dataIdPrefix 緩存了兩個文件,區別就是一個帶着文件擴展名,一個沒有帶擴展名。
然后我無論如何也不能把這個去掉了,這樣就比較尷尬了。
既然這是個bug,我覺的,nacos 的config 不再采用與spring cloud 做集成了,換成spring boot好了,然后配置一下,改為:

<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.7</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.5.RELEASE</version>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-common</artifactId>
</exclusion>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-api</artifactId>
</exclusion>
</exclusions>
</dependency>

然后啟動,正常。使用feignClient,也正常
最后結果如圖:

每隔30s長輪詢一下服務器。

最后說明一下,長輪詢是使用spring boot 中的nacos-client的版本,版本我采最新的1.2.0  ,而去除了spring cloud中的nacos-client的1.4.1版本

原因就是,最新的nacos-config-spring-boot-starter0.2.7版本竟然與nacos-client 1.4.1版本不兼容,1.2.0中有個com.alibaba.nacos.client.utils.StringUtils類去掉了, 去掉了··········

木辦法,希望nacos-config-spring-boot-starter 趕快更新版本,把nacos-client升級一下。

再說明一下,在nacos-client 1.4.1 版本中,這個打印作了一個判斷,如果是空的話就不打印了。

我暫時只能查到現在這一步了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM