Spring Cloud Alibaba系列教程: https://blog.csdn.net/thinkingcao/category_9716788.htmlhtml
1、問題
在一次項目架構中,使用SpringCloud
微服務架構,其中將Spring Cloud Alibaba
中的部分組件整合SpringCloud
組件一塊兒使用,服務發現和配置中心使用的是阿里巴巴開源的組件nacos
,nacos-server
部署在linux
下的centos7.0
環境上,每一個服務啓動時都會去鏈接nacos-server
端,將服務註冊到nacos
上,同時從nacos
配置中心拉取配置文件信息,也就是nacos
替代了以前的eureka
和Spring Cloud Config
;
在使用nacos
做爲註冊中心和配置中心,通過屢次在項目實踐中使用,發現了nacos
框架存在一些Bug,由於nacos部署在遠程Linux環境上,公司網絡存在部分延遲波動,偶爾會產生nacos配置中心超時的問題,並且我特意去Windwos下嘗試過,在Windows
下無此問題,只是部署在Linux
下時,客戶端鏈接配置中心時會報超時錯誤,錯誤日誌以下:java
2020-04-14 09:51:15.874 ERROR [jiuyv-gateway,,,] 15364 --- [252.80.198_8848] c.a.n.c.config.http.ServerHttpAgent : [NACOS SocketTimeoutException httpPost] currentServerAddr: http://130.252.80.198:8848, err : Read timed out 2020-04-14 09:51:15.874 ERROR [jiuyv-gateway,,,] 15364 --- [252.80.198_8848] c.a.n.c.config.http.ServerHttpAgent : no available server, currentServerAddr : http://130.252.80.198:8848 2020-04-14 09:51:16.049 ERROR [jiuyv-gateway,,,] 15364 --- [252.80.198_8848] c.a.n.client.config.impl.ClientWorker : [fixed-130.252.80.198_8848] [check-update] get changed dataId exception java.net.ConnectException: no available server, currentServerAddr : http://130.252.80.198:8848 at com.alibaba.nacos.client.config.http.ServerHttpAgent.httpPost(ServerHttpAgent.java:170) ~[nacos-client-1.1.4.jar:na] at com.alibaba.nacos.client.config.http.MetricsHttpAgent.httpPost(MetricsHttpAgent.java:64) ~[nacos-client-1.1.4.jar:na] at com.alibaba.nacos.client.config.impl.ClientWorker.checkUpdateConfigStr(ClientWorker.java:377) [nacos-client-1.1.4.jar:na] at com.alibaba.nacos.client.config.impl.ClientWorker.checkUpdateDataIds(ClientWorker.java:352) [nacos-client-1.1.4.jar:na] at com.alibaba.nacos.client.config.impl.ClientWorker$LongPollingRunnable.run(ClientWorker.java:512) [nacos-client-1.1.4.jar:na] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_25] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_25] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_25] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_25] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_25] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_25] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_25] 2020-04-14 09:51:16.052 ERROR [jiuyv-gateway,,,] 15364 --- [252.80.198_8848] c.a.n.client.config.impl.ClientWorker : longPolling error : java.net.ConnectException: no available server, currentServerAddr : http://130.252.80.198:8848 at com.alibaba.nacos.client.config.http.ServerHttpAgent.httpPost(ServerHttpAgent.java:170) ~[nacos-client-1.1.4.jar:na] at com.alibaba.nacos.client.config.http.MetricsHttpAgent.httpPost(MetricsHttpAgent.java:64) ~[nacos-client-1.1.4.jar:na] at com.alibaba.nacos.client.config.impl.ClientWorker.checkUpdateConfigStr(ClientWorker.java:377) ~[nacos-client-1.1.4.jar:na] at com.alibaba.nacos.client.config.impl.ClientWorker.checkUpdateDataIds(ClientWorker.java:352) ~[nacos-client-1.1.4.jar:na] at com.alibaba.nacos.client.config.impl.ClientWorker$LongPollingRunnable.run(ClientWorker.java:512) ~[nacos-client-1.1.4.jar:na] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_25] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_25] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_25] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_25] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_25] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_25] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_25]
控制檯截圖以下:
linux
2、緣由
緣由是因爲在遠程服務器上的配置,網絡有些延遲,二nacos
框架中將超時時間設置得特別短,在短期內就一直報超時異常,雖然不影響使用,可是問題仍是很明顯,框架存在bug
,若是將一樣的配置放在本地nacos
配置中心上啓動,則沒有碰見該問題。git
3、解決方式
3.1 查源碼,提Issue
在發現這個異常是框架自身所產生的bug
以後,去分析nacos
源碼,查看Issue
: https://github.com/alibaba/nacos/issues/2206 ,看看是否有相似的問題,在GitHub
上查到了有其餘大佬提出的這種超時問題,可是沒有明確解決方式,只是說在將來的1.2.0
版本上會修復這個問題; 而後我又繼續搜索解決方式,看到有部分人提出解決方式是將nacos
的client
和server
端都升級到1.2.0
版本,說是能夠解決這個問題,因而我在nacos
源碼下方提了個Issue
,有技術大佬對我提出的Issue
作出了以下回答,具體解決方式以下:github
Issue: https://github.com/alibaba/nacos/issues/2206
web
3.2 解決方式: pom加入nacos-client端依賴
在收到Issue
的回答以後,我將我項目中的nacos
的client
升級到1.2.0
是OK的,成功解決了個人問題spring
<!-- Alibaba-nacos服務發現--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- Alibaba-nacos配置中心--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.2.0</version> </dependency>
3.3 技術棧版本
- Spring Boot Version: 2.1.6.RELEASE
- Spring Cloud Version: Spring Cloud Greenwich
- Spring Cloud Alibaba Version: 2.1.1.RELEASE
- Nacos Version: 1.1.4
- Java Version: 1.8
3.4 總結
我建設的項目以Spring Cloud旗下組件爲基礎,同時融合了Spring Cloud Alibaba中的一些優秀組件,經過以上將nacos
集成到微服務項目中做爲服務註冊與發現和配置中心的實踐,發現阿里大廠的開源的nacos框架仍是存在一些小問題,不過咱們要擁抱開源,支持國產,相信在後續的版本迭代中,阿里大廠開源的這一款nacos
框架會更加完善,到時候咱們再體驗他更加具備體驗性的功能吧。centos
關於nacos組件,以及對於微服務架構的領域,若是有問題,請評論聯繫或者加入微服務技術棧QQ大羣: 867729470
,我很願意與各位小夥伴一塊兒在探討中互相進步。服務器
4、參考文檔
Nacos 文檔: https://nacos.io/zh-cn/docs/what-is-nacos.html網絡
本文同步分享在 博客「Thinkingcao」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。