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;
}
}