動態

詳情 返回 返回

spring boot cloud使用nacos配置中心始終高頻重複拉取配置文件原因分析及解決 - 動態 詳情

項目使用spring boot cloud2.6版本,接入nacos配置中心,上線後發現一直大量日誌輸出,如下:

2025-08-01 01:27:11.846 [INFO ] [com.alibaba.nacos.client.Worker.longPolling.fixed-mse-aaa-nacos-ans.mse.aliyuncs.com_8848-public] [com.alibaba.nacos.client.config.impl.ClientWorker] - [fixed-mse-aaa-nacos-ans.mse.aliyuncs.com_8848-public] [polling-resp] config changed. dataId=ucenter-service.properties, group=cDTx, tenant=public  
2025-08-01 01:27:11.846 [INFO ] [com.alibaba.nacos.client.Worker.longPolling.fixed-mse-aaa-nacos-ans.mse.aliyuncs.com_8848-public] [com.alibaba.nacos.client.config.impl.ClientWorker] - get changedGroupKeys:[ucenter-service.properties+cDTx+public]  
2025-08-01 01:27:11.850 [INFO ] [com.alibaba.nacos.client.Worker.longPolling.fixed-mse-aaa-nacos-ans.mse.aliyuncs.com_8848-public] [com.alibaba.nacos.client.config.impl.ClientWorker] - [fixed-mse-aaa-nacos-ans.mse.aliyuncs.com_8848-public] [data-received] dataId=ucenter-service.properties, group=cDTx, tenant=public, md5=ee461a4366ebe744bb7adaa32d53c41f, content=dash-scope.api.key=sk-aaaaa
xinyue.jump.miniapp.corresponding.default.wor..., type=properties  
2025-08-01 01:27:12.046 [INFO ] [com.alibaba.nacos.client.Worker.longPolling.fixed-mse-aaa-nacos-ans.mse.aliyuncs.com_8848-public] [com.alibaba.nacos.client.config.impl.ClientWorker] - [fixed-mse-aaa-nacos-ans.mse.aliyuncs.com_8848-public] [polling-resp] config changed. dataId=ucenter-service.properties, group=cDTx, tenant=public  
2025-08-01 01:27:12.046 [INFO ] [com.alibaba.nacos.client.Worker.longPolling.fixed-mse-aaa-nacos-ans.mse.aliyuncs.com_8848-public] [com.alibaba.nacos.client.config.impl.ClientWorker] - get changedGroupKeys:[ucenter-service.properties+cDTx+public]  
2025-08-01 01:27:12.050 [INFO ] [com.alibaba.nacos.client.Worker.longPolling.fixed-mse-aaa-nacos-ans.mse.aliyuncs.com_8848-public] [com.alibaba.nacos.client.config.impl.ClientWorker] - [fixed-mse-aaa-nacos-ans.mse.aliyuncs.com_8848-public] [data-received] dataId=ucenter-service.properties, group=cDTx, tenant=public, md5=ee461a4366ebe744bb7adaa32d53c41f, content=dash-scope.api.key=sk-aaaaa
xinyue.jump.miniapp.corresponding.default.wor..., type=properties  
2025-08-01 01:27:12.246 [INFO ] [com.alibaba.nacos.client.Worker.longPolling.fixed-mse-aaa-nacos-ans.mse.aliyuncs.com_8848-public] [com.alibaba.nacos.client.config.impl.ClientWorker] - [fixed-mse-aaa-nacos-ans.mse.aliyuncs.com_8848-public] [polling-resp] config changed. dataId=ucenter-service.properties, group=cDTx, tenant=public  
2025-08-01 01:27:12.246 [INFO ] [com.alibaba.nacos.client.Worker.longPolling.fixed-mse-aaa-nacos-ans.mse.aliyuncs.com_8848-public] [com.alibaba.nacos.client.config.impl.ClientWorker] - get changedGroupKeys:[ucenter-service.properties+cDTx+public]  
2025-08-01 01:27:12.250 [INFO ] [com.alibaba.nacos.client.Worker.longPolling.fixed-mse-aaa-nacos-ans.mse.aliyuncs.com_8848-public] [com.alibaba.nacos.client.config.impl.ClientWorker] - [fixed-mse-aaa-nacos-ans.mse.aliyuncs.com_8848-public] [data-received] dataId=ucenter-service.properties, group=cDTx, tenant=public, md5=ee461a4366ebe744bb7adaa32d53c41f, content=dash-scope.api.key=sk-aaaaa
xinyue.jump.miniapp.corresponding.default.wor..., type=properties

仔細查看後發現,該日誌每秒輸出一次,提示內容為nacos配置文件ucenter-service.properties已修改需更新,但是在此過程中並未修改過配置文件,日誌提示的內容和md5值也和nacos配置文件一致。

通過斷點調試確認,是在使用/nacos/v1/cs/configs/listener nacos api監聽配置文件修改事件時始終返回配置文件已修改,導致spring一直在重複拉取配置文件信息,如下:

進一步確認刪除該配置文件後再次添加,或重啓nacos集羣,該現象依然存在。

為了進一步調試解決問題,依據 https://nacos.io/zh-cn/docs/open-api.html 文檔中對/nacos/v1/cs/configs/listener接口定義,編寫python腳本單獨調試該接口,

import requests

r = requests.post("http://192.168.5.173:8848/nacos/v1/cs/configs/listener",
                  data="Listening-Configs=cdtx-ucenter-service.properties%02cdtx_dev%02cd6ee446cf802c961464a3d0f2738115%02public%01",
                  headers={"Content-Type": "application/x-www-form-urlencoded",
                           "Long-Pulling-Timeout": "30000"})
print(r.content)

測試現象如下:
1、不傳Long-Pulling-Timeout Header值,同時namespace值傳public,返回正常

2、傳遞Long-Pulling-Timeout Header值30000,同時namespace值傳public,返回已修改

3、傳遞Long-Pulling-Timeout Header值30000,同時namespace值傳空字符串,正常掛起處於等待狀態

結論:/nacos/v1/cs/configs/listener接口如果namespace為public需要傳遞為空字符串,不能傳public,項目設置了spring.cloud.nacos.config.namespace值為public,在運行過程中使用/nacos/v1/cs/configs/listener監聽配置文件是否修改立即返回已修改,導致後續重複拉取配置文件內容並能成功,導致一直重複執行,因此修改項目配置spring.cloud.nacos.config.namespace值為空字符即可解決。

Add a new 評論

Some HTML is okay.