第一種,直接new一個(gè)RestTemplate
實(shí)例將url
寫死
@RestController
@Slf4j
public class ClientController {
@GetMapping("/getProductMsg")
public String getProductMsg() {
// 第一種,直接使用restTemplate url寫死
RestTemplate restTemplate = new RestTemplate();
String resp = restTemplate.getForObject("http://localhost:8080/msg", String.class);
log.info("resp={}", resp);
return resp;
}
}
第二種,利用Spring Cloud
提供的LoadBalancerClient
來獲取應(yīng)用的host
和port
值
@RestController
@Slf4j
public class ClientController {
// spring cloud 提供的
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("/getProductMsg")
public String getProductMsg() {
RestTemplate restTemplate = new RestTemplate();
// 第二種 利用loadBalancerClient 通過應(yīng)用名獲取url弄慰,然后再使用restTemplate
ServiceInstance serviceInstance = loadBalancerClient.choose("PRODUCT");
String url = String.format("http://%s:%s", serviceInstance.getHost(), serviceInstance.getPort()) + "/msg";
String resp = restTemplate.getForObject(url, String.class);
log.info("resp={}", resp);
return resp;
}
}
第三種第美,使用了Ribbon
,利用@LoadBalanced
注解可在RestTemplate中使用應(yīng)用的名字
先注冊一個(gè)RestTemplate
的bean
@Component
public class RestTemplateConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
再注入使用
@RestController
@Slf4j
public class ClientController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/getProductMsg")
public String getProductMsg() {
// 第三種 利用@LoadBalanced 可在restTemplate中使用應(yīng)用的名字
String resp = restTemplate.getForObject("http://PRODUCT/msg", String.class);
log.info("resp={}", resp);
return resp;
}
}