这是一篇非常简单的笔记, 有用的只是第三种实现方式
RestTemplate 的三种实现方式
第一种方式 这不重要
直接使用 new 一个RestTemplate出来, URL直接写死:
RestTemplate restTemplate = new RestTemplate();
String resp = restTemplate.getForObject("http://localhost:8080/msg", String.class);
第二种方式 这也不重要
利用 loadBalancerClient 通过应用名获取 URL 再 new RestTemplate()
RestTemplate restTemplate = new RestTemplate();
// choose(param) param -> 在 Eureka 中注册的地址
ServiceInstance serviceInstance = loadBalancerClient.choose("PRODUCT");
String url = String.format(
"http://%s:%s",
serviceInstance.getHost(),
serviceInstance.getPost());
String response = restTemplate.getForObject(url, String.class);
第三种方式 这是最好用的
注册一个 JavaBean
@Component
public class RestTemplateConfig {
@Bean
@LoadBalanced // 此注解可在 RestTemplate 里使用应用名字
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
Spring-boot MVC Service
@Autowired
private RestTemplate restTemplate;
public String testServer () {
// 注意 PRODUCT 是 Eureka Server 上注册的服务器名
String resp = restTemplate.getForObject("http://PRODUCT/msg", String.class);
log.info("response={}", resp);
return resp
}