在学习使用eureka的时候 启动一个eureka服务A,注册进去一个服务B,然后启动一个服务C,通过服务C请求A注册到eureka中的服务名发起向B的请求,
服务C的部分代码:
@Bean
RestTemplate restTemplate(){
return new RestTemplate();
}
@RequestMapping("/test")
public String getTest(){
String url = "http://COMPANY-SERVER/get";
String forObject = restTemplate.getForObject(url, String.class);
return forObject;
}
发现报错:
java.net.UnknownHostException: COMPANY-SERVER
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184) ~[na:1.8.0_144]
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[na:1.8.0_144]
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_144]
at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_144]
at java.net.Socket.connect(Socket.java:538) ~[na:1.8.0_144]
at sun.net.NetworkClient.doConnect(NetworkClient.java:180) ~[na:1.8.0_144]
at sun.net.www.http.HttpClient.openServer(HttpClient.java:463) ~[na:1.8.0_144]
at sun.net.www.http.HttpClient.openServer(HttpClient.java:558) ~[na:1.8.0_144]
at sun.net.www.http.HttpClient.<init>(HttpClient.java:242) ~[na:1.8.0_144]
at sun.net.www.http.HttpClient.New(HttpClient.java:339) ~[na:1.8.0_144]
at sun.net.www.http.HttpClient.New(HttpClient.java:357) ~[na:1.8.0_144]
这是什么原因呢?看代码写法都一样,百思不得姐,后来发现,使用的restTemplate 必须使用注解 @LoadBalanced,也就是必须引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
然后在发起调用,请求成功,特此记录一下