為了以后工程遷移到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 版本中,這個打印作了一個判斷,如果是空的話就不打印了。
我暫時只能查到現在這一步了