1.第一種方式直接使用RestTemplate,url固定
@GetMapping("getProductMsg")
public String getProductMsg(){
RestTemplate restTemplate = new RestTemplate();
String response = restTemplate.getForObject("http://127.0.0.1:8080/msg", String.class);
log.info("response={}",response);
return response;
}
2.第二種方式(利用LoadBalancerClient通過應用名稱擷取URl。再使用RestTemplate)
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("getProductMsg")
public String getProductMsg(){
RestTemplate restTemplate = new RestTemplate();
ServiceInstance serviceInstance = loadBalancerClient.choose("PRODUCT");
String url = String.format("http://%s:%s",serviceInstance.getHost(),serviceInstance.getPort());
String response = restTemplate.getForObject(url,String.class);
log.info("response={}",response);
return response;
}
**注意:**PRODUCT為需要調用的服務名
3.第三種方式:利用@LoadBalanced可在RestTemplate裡使用應用的名字調用服務
3.1新增RestTemplateConfig配置檔案
@Component
public class RestTemplateConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
3.2調用
public class ClientController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("getProductMsg")
public String getProductMsg(){
String response = restTemplate.getForObject("http://PRODCUT/msg",String.class);
log.info("response={}",response);
return response;
}
}