準備
服務端我是用的是一個普通的API
@RestController
public class ServerController {
@GetMapping("/msg")
public String msg(){
return "this is product' msg";
}
}
第一種方式
直接使用restTemplate,url寫死
@Slf4j
@RestController
public class ClientController {
@GetMapping("/getProductMsg")
public String getProductMsg(){
// 1、第一種方式(直接使用restTemplate,url寫死)
RestTemplate restTemplate = new RestTemplate();
String response = restTemplate.getForObject("http://localhost:9082/msg",String.class);
log.info("response={}",response);
return response;
}
}
第二種方式
第二種方式(利用loadBalancerClient通過應用名獲取url,然後再使用restTemplate)
@Slf4j
@RestController
public class ClientController {
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("/getProductMsg")
public String getProductMsg(){
//2、第二種方式(利用loadBalancerClient通過應用名獲取url,然後再使用restTemplate)
ServiceInstance serviceInstance = loadBalancerClient.choose("PRODUCT");
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 response;
}
}
第三種方式
第三種方式(利用@LoadBalanced,可再restTemplate裏使用應用名字)
@Component
public class RestTemplateConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
@Slf4j
@RestController
public class ClientController {
@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;
}
}
github項目
基於SpringCloud微服務演化的點餐Demo系統