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

1、問題

在一次項目架構中,使用SpringCloud微服務架構,其中將Alibaba-Cloud配置SpringCloud組件使用,服務發現和配置中心使用的是阿里巴巴開源的組件nacosnacos-server部署在linux下的centos7.0環境上,每一個服務啓動時都會去鏈接nacos-server端,在nacos-server部署在Linux環境下時,因爲網絡波動等緣由,框架bug就產生了,Windows下無此問題,部署在Linux下,客戶端鏈接配置中心時會報以下錯誤,錯誤日誌以下:html

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]

控制檯截圖以下:
在這裏插入圖片描述
java

2、緣由

緣由是因爲在遠程服務器上的配置,網絡有些延遲,二nacos框架中將超時時間設置得特別短,在段時間內就一直報超時異常,雖然不影響使用,可是問題仍是很明顯,框架存在bug,若是將一樣的配置放在本地nacos配置中心上啓動,則沒有碰見該問題。linux

3、解決方式

1. 查源碼,提Issue

在得出這個異常是框架的bug以後,查找nacos源碼,查看Issuehttps://github.com/alibaba/nacos/issues/2206 ,看看是否有相似的問題,在GitHub上查到了這種超時問題,可是沒有明確解決方式,只是說在將來的1.2.0版本以後會解決掉,並且有部分人nacosclientserver端都升級1.2.0版本,依然有此問題,因而我提了個Issue,官方GitHub上的回答以下:git

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

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

<!-- 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. 我使用的版本

  • 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

經過以上將nacos集成到微服務項目中做爲服務註冊與發現和配置中心的實踐,仍是有點小bug,相信在後續更新中,nacos框架會更加完善,到時候咱們再體驗他更加具備體驗性的功能吧。spring

若是有問題,請評論聯繫,我很願意探討。centos

發佈了338 篇原創文章 · 獲贊 237 · 訪問量 81萬+
相關文章
相關標籤/搜索