nacos配置中心超時問題:java.net.ConnectException: no available server, currentServerAddr

Spring Cloud Alibaba系列教程: https://blog.csdn.net/thinkingcao/category_9716788.htmlhtml

1、問題

在一次項目架構中,使用SpringCloud微服務架構,其中將Spring Cloud Alibaba中的部分組件整合SpringCloud組件一塊兒使用,服務發現和配置中心使用的是阿里巴巴開源的組件nacosnacos-server部署在linux下的centos7.0環境上,每一個服務啓動時都會去鏈接nacos-server端,將服務註冊到nacos上,同時從nacos配置中心拉取配置文件信息,也就是nacos替代了以前的eurekaSpring 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源碼,查看Issuehttps://github.com/alibaba/nacos/issues/2206 ,看看是否有相似的問題,在GitHub上查到了有其餘大佬提出的這種超時問題,可是沒有明確解決方式,只是說在將來的1.2.0版本上會修復這個問題; 而後我又繼續搜索解決方式,看到有部分人提出解決方式是將nacosclientserver端都升級到1.2.0版本,說是能夠解決這個問題,因而我在nacos源碼下方提了個Issue,有技術大佬對我提出的Issue作出了以下回答,具體解決方式以下:github

Issue: https://github.com/alibaba/nacos/issues/2206
在這裏插入圖片描述web

3.2 解決方式: pom加入nacos-client端依賴

在收到Issue的回答以後,我將我項目中的nacosclient升級到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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索