版本
spring-cloud-alibaba:2021.1
項目構建工具:gradle
nacos-server:2.0.3
昨天早上上班來了之後,運營的同事著急的過來說生產環境登不上了,我趕緊打開日誌看了之後,就發現了這樣的報錯
問了運維他們說他們大晚上的也沒改伺服器的配置,於是就開啟了漫長的debug之路
在網上看了一大堆的解決方案之後,最後發現了兩個比較合適的解決方案
1、https://github.com/alibaba/nacos/issues/5788
2、https://segmentfault.com/a/1190000040083941
其中方案一在和運維的同事討論之後,認為我們自己的伺服器環境不適合那種解決方案,所以就注重參考了方案二,下面來具體說一下方案二
---華麗的分割線-
方案二中的這段話引起了我的注意
仔細查看了我的代碼之後發現,雖然我引入的是spring-cloud-alibaba的2021.1版本,但是在spring-cloud-starter-alibaba-nacos-config和spring-cloud-starter-alibaba-nacos-discovery中nacos-client的版本還是1.4.1
也就是說雖然大的版本升級了,但是裡面nacos-client的小版本並未升級。
找到了這個問題之後,我們就可以在grade(或者maven)中手動排除一下nacos-client,重新引入一下nacos-client的最新版本
compile ('com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config') { exclude group:'com.alibaba.nacos', module:'nacos-client' } compile ('com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery') { exclude group:'com.alibaba.nacos', module:'nacos-client' } compile ('com.alibaba.nacos:nacos-client:2.0.3')改了之後的依賴關係是這樣的
4、問題總結
重新上線部署之後,截止目前還沒發現別的問題雖然是生產環境登不上了,但是我在仔細排查之後發現,其實服務本身並未宕機,直接調用該服務上的接口還是可以調的通的,只是該服務被nacos從服務列表中剔除了,出現該問題的原因應該是:報錯之後打斷了服務和nacos之間的心跳連接,nacos連接不上服務之後,就剔除了該服務,所以在feign調用的時候就報錯了,但是不知道為什麼服務恢復之後沒有自動重連。至於為什麼會好好的出現這個異常,還需要再繼續研究一下。
Spring Cloud Alibaba和Spring Cloud和Nacos的版本對應關係:
因為我們公司項目的Spring Cloud版本之前升級到了2020.0.1,所以我的Spring Cloud Alibaba的版本只可以選擇2021.1,那麼我的Nacos版本也就只可以選擇1.4.1了,But我當前的Nacos版本卻是最新的2.0.3,不過目前還沒有發現不可逆的錯誤。
筆者在此謹慎的告訴大家:版本升級的時候,一定要看清楚各個版本之間的對應關係,避免因為版本不對應的原因導致一些莫名其妙的bug出現這個問題之後,我們在生產環境加上了Nacos的Prometheus監控平臺,具體的搭建流程大家可以參考Nacos的官方文檔自行操作
參考連結:
https://github.com/alibaba/nacos/issues/5788
https://segmentfault.com/a/1190000040083941