今天在搭建一個springcloud項目在搭建以zuul為網關的時候,項目拋了一個異常,
com.netflix.zuul.exception.ZuulException: Forwarding error
xxxxx
這里就略過,這里的forwarding error 表示網關轉發失敗,后面緊接着報了一個這個錯
Caused by: com.netflix.client.ClientException: null
xxx
UnknownHostException: xxx服務名
然后在網上搜了一下,於是解決了這個問題
看異常名其實可以看出來,未知的主機,故而分析得出來Zuul轉發不到所要轉發的服務,於是看了一下springcloud的eureka配置,發現有一個配置
如下: 這個配置的作用是 在eureka上暴露這個注冊的服務內網IP,於是在eureka注冊中心加上這一句(注:如果是高可用集群,所要集群的服務都要加上這個)
eureka: client: instance: #register ip to eureka prefer-ip-address: true
至此,完美解決這個問題;
但是 緊接着又有了新的問題:
com.netflix.client.ClientException: Load balancer does not have available server for client ...
這里就把重要的異常貼進來哈
報錯的大致意思是
沒有可用的負載均衡的客戶端服務
於是 又開始google,
發現加上
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency>
這個依賴 可以完美解決這個問題
至於為什么,大概是這個包里面有默認配置LoadBanlance的
可以看看 org.springframework.cloud.client.loadbalancer包下面的源碼