一、RestTemplate
1、第一种方式(直接使用 restTemplate,url 写死)
@GetMapping("/getProductMsg")
public String getProductMsg() {
// 1、第一种方式(直接使用 restTemplate,url 写死)
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() {
// 2、第二种方式(利用 loadBalancerClient 通过应用名获取 url, 然后再使用 restTemplate)
ServiceInstance serviceInstance = loadBalancerClient.choose("PRODUCT");
log.info("host={}", serviceInstance.getHost());
log.info("port={}", serviceInstance.getPort());
log.info("uri={}", serviceInstance.getUri());
String url = String.format("http://%s:%s", serviceInstance.getHost(), serviceInstance.getPort()) + "/msg";
RestTemplate restTemplate = new RestTemplate();
String response = restTemplate.getForObject(
url,
String.class
);
log.info("response={}", response);
return serviceInstance.getUri() + " " + response;
}
3、第三种方式(利用 @LoadBalanced,可在 restTemplate 里面使用应用名字)
@Component
public class RestTemplateConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
@Autowired
private RestTemplate restTemplate;
@GetMapping("/getProductMsg")
public String getProductMsg() {
// 3、第三种方式(利用 @LoadBalanced,可在 restTemplate 里面使用应用名字)
String response = restTemplate.getForObject(
"http://PRODUCT/msg",
String.class
);
log.info("response={}", response);
return response;
}
二、Feign
@FeignClient(name = "product")
public interface ProductClient {
@GetMapping("/msg")
String productMsg();
}
@Autowired
private ProductClient productClient;
@GetMapping("/getProductMsg")
public String getProductMsg() {
String response = productClient.productMsg();
log.info("response={}", response);
return response;
}
最后修改:2020-12-11 12:48:41
© 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

发表评论