日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Cloud Alibaba 服务消费者调用 nacos 服务报错:java.net.UnknownHostException: xxx

發(fā)布時間:2023/12/29 javascript 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Cloud Alibaba 服务消费者调用 nacos 服务报错:java.net.UnknownHostException: xxx 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

1. 服務(wù)消費(fèi)者啟動類

?1.1. 服務(wù)消費(fèi)者 controller

?2. 服務(wù)提供者啟動類

2.1. 服務(wù)提供者 controller

?3. 服務(wù)報錯

4. nacos 信息

5. 解決思路

5.1. 配置、注解檢查

5.2. 其他方面原因排查

6. 解決方案

7. 參考連接


在 SpringBoot 項目中調(diào)用另外的服務(wù)報錯:

重點是這一句:

java.net.UnknownHostException: stock-nacos?

意思是未知的主機(jī)異常:stock-nacos

stock-nacos 是被調(diào)用方。

項目架構(gòu)如下:

框架版本號
Spring Boot?? 2.6.3
spring.cloud.alibaba 2021.0.1.0
spring.cloud 2021.0.1

采用 RestTemplate 進(jìn)行服務(wù)之間的調(diào)用,配置負(fù)載均衡注解,代碼如下:

1. 服務(wù)消費(fèi)者啟動類

package com.dake.order;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate;@SpringBootApplication // 在spring cloud 現(xiàn)在的新版本中不需要添加了 @EnableDiscoveryClient public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}// 通常寫在配置類中,但是示例的話就這樣也可以// LoadBalanced注解是告訴該服務(wù)調(diào)用對方服務(wù)時使用負(fù)載均衡策略調(diào)用,沒有此注解則調(diào)用時會報500的錯誤響應(yīng)碼@Bean@LoadBalancedpublic RestTemplate restTemplate() { // public RestTemplate restTemplate(RestTemplateBuilder builder ) {// 可以 new RestTemplate,但是官方推薦 RestTemplateBuilder 構(gòu)造器來構(gòu)造,提現(xiàn)了構(gòu)造者模式的設(shè)計思想// 在這里可以設(shè)置超時時間等屬性,這里先不設(shè)置return new RestTemplate(); // return builder.build();} }

?1.1. 服務(wù)消費(fèi)者 controller

package com.dake.order.controller;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate;@RestController @RequestMapping("/order") public class OrderController {@AutowiredRestTemplate restTemplate;@Value("${service-url.nacos-user-service}")private String serviceUrl;@Value("${server.port}")private String port;@RequestMapping("/add")public String add() { // String msg = restTemplate.getForObject("http://localhost:8021" + "/stock/reduct", String.class);String msg = restTemplate.getForObject(serviceUrl + "/stock/reduct", String.class);System.out.println("---------下單成功---------");return "Hello World " + msg + ":" + port;} }

?2. 服務(wù)提供者啟動類

package com.dake.stock;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication @EnableDiscoveryClient public class StockApplication {public static void main(String[] args) {SpringApplication.run(StockApplication.class, args);} }

2.1. 服務(wù)提供者 controller

package com.dake.stock.controller;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;@RestController @RequestMapping("/stock") public class StockController {@RequestMapping("/reduct")public String reduct() {System.out.println("---------扣減庫存---------");return "扣減庫存";} }

?3. 服務(wù)報錯

通過 URL 調(diào)用服務(wù)消費(fèi)者的 controller 報錯:

報錯信息,參見文章開頭。

4. nacos 信息

我們 nacos 配置完成,1個服務(wù)消費(fèi)者實例和2個服務(wù)提供者實例均已注冊到 nacos 中。

?關(guān)于 nacos 的配置檢查完畢,沒有發(fā)現(xiàn)有問題。

5. 解決思路

5.1. 配置、注解檢查

我們要看是否缺少了注解、配置,或者配置錯誤,檢查完畢之后沒有發(fā)現(xiàn)有什么問題。

有文章說需要在 RestTemplate 上添加?@LoadBalanced 注解。如果我們?nèi)タ次业姆?wù)消費(fèi)者啟動類,就會發(fā)現(xiàn),該注解我們是有的。

還有人說是 需要在啟動類上添加注解?@EnableDiscoveryClient 。實際上,在新版本的 Spring Cloud Alibaba 中,該注解不使用一樣可以實現(xiàn)服務(wù)注冊與發(fā)現(xiàn)功能。我們在下文會演示不添加該注解是否可以自動實現(xiàn)服務(wù)注冊于發(fā)現(xiàn)。

5.2. 其他方面原因排查

到了這里,還是解決不了問題。此時不得不去考慮,是否是 SpringBoot版本、 Spring Cloud 與 Spring Cloud Alibaba 版本兼容問題。通過官網(wǎng)我們發(fā)現(xiàn)我們使用的版本兼容性沒有問題,我們也不用去想我們發(fā)現(xiàn)了什么 bug 之類的奇思妙想。

還有人說是 JDK 版本兼容問題。這個有可能,我使用的是 JDK 17,這個倒是有可能,但是我將 JDK 版本降低之后發(fā)現(xiàn)還是同樣的錯誤。

我們排除了各種原因之后,還是解決不了問題,那這個可能就麻煩了。

我通過翻看自己之前的項目,也去網(wǎng)上找了?Spring Cloud Alibaba 的教程,也沒有發(fā)現(xiàn)問題。

就這樣,沒有辦法了,這個項目的演示就耽擱這里了。

6. 解決方案

過了一陣子,我回頭繼續(xù)看這個問題,還是同樣的錯誤。但是這次我們嘗試了不同的檢索方式,最終讓我找到了一個解決方案:

服務(wù)消費(fèi)方的 pom 文件中添加依賴:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency>

?找到的參考文章中沒有提到在服務(wù)消費(fèi)者還是服務(wù)提供者的 pom 中添加該依賴,我個人感覺應(yīng)該是服務(wù)消費(fèi)者 ,因為它添加的是負(fù)載均衡的依賴,而 nacos 自帶的 Ribbon 是一個客戶端負(fù)載均衡,意思就是誰調(diào)用就誰來決定負(fù)載均衡策略。當(dāng)然還有服務(wù)端負(fù)載均衡策略,如F5、HA等,這不在本文的討論范圍,感興趣者可以自行查閱資料。

我門就在服務(wù)消費(fèi)者的 pom 中添加了以上依賴,剛開始可能是項目編譯問題,沒有成功,我將服務(wù)提供者的 pom 中也添加了該依賴,重新編譯后調(diào)用成功了。但是這里我們不清楚真正加在哪里,我們?nèi)コ?服務(wù)消費(fèi)者的該依賴,結(jié)果調(diào)用失敗。這也證明了是需要添加在?服務(wù)消費(fèi)者的pom 中。但是,這不一定正確,因為我們之前也在服務(wù)提供者中也添加了該依賴,下面我們?nèi)コ?wù)提供者中的依賴,最終如圖:

?啟動項目,重新調(diào)用,成功:

7. 參考連接

Spring Cloud:負(fù)載均衡 - Spring Cloud Loadbalancer原理?

(已解決)nacos+RestTemplate使用服務(wù)名報異常java.net.UnknownHostException

總結(jié)

以上是生活随笔為你收集整理的Spring Cloud Alibaba 服务消费者调用 nacos 服务报错:java.net.UnknownHostException: xxx的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。