eureka學習問題-使用服務名呼叫報錯
阿新 • • 發佈:2019-02-09
問題:
在註冊中心註冊了兩個方法,
但是無法使用服務名呼叫相應的方法
@GetMapping("/user/{id}") public User findById(@PathVariable("id") String id) { return this.restTemplate.getForObject("http://MICROSERVICE-PROVIDER-USER/" + id, User.class); }
異常:
java.net.UnknownHostException: MICROSERVICE-PROVIDER-USER at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184) ~[na:1.8.0_102] at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[na:1.8.0_102] at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_102] at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_102]
解決方案:
在restTemplate的bean上新增@LoadBalance負載均衡標籤。
原因:
RestTemplateCustomizer會給會將標有@LoadBalance的RestTemplate新增一個攔截器,攔截器的作用就是對請求的URI進行轉換獲取到具體應該請求哪個服務例項ServiceInstance。
@LoadBalance的本質上一個注入標籤,具體檢視