基于RestTemplate对象,可以进行远端服务调用 例如sca-consumer调用sca-provider
1.在配置类中配置RestTemplate:
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
2.在ConsumerController中,进行远端调用ProviderController:
@RestController
public class ConsumerController {
//通过此对象进行远端服务调用
@Autowired
private RestTemplate restTemplate;
/**
*当浏览器访问这个方法时
* 在此方法内部 基于RestTemplate对象 进行远端方法调用
* */
@GetMapping("/consumer/doRestEcho1")
public String doRestEcho1() {
//调用的远端服务的url
String url = "http://localhost:8085/provider/echo/abcd";
return restTemplate.getForObject(url,
String.class//远端url响应数据类型
);
}
}
ProviderController远端服务:
@RestController
public class ProviderController {
@Value("${server.port:8080}")
private String server;
@GetMapping("/provider/echo/{msg}")
public String doRestEcho1(@PathVariable String msg) throws InterruptedException {
return server + "..." + msg;
}
}
@LoadBananced
使用@LoadBalanced描述RestTemplate对象时,系统底层在基于RestTemplate进行远端服务调用时,会被一个拦截器拦截,然后进行功能增强
增强是指:基于loadBalancerClint对象进行服务实例获取。这个服务实例获取的过程,会自动采用负载均衡
@Bean//bean的名字默认是方法名
@LoadBalanced
public RestTemplate loadBalancedRestTemplate() {
return new RestTemplate();
}
ConsumerController:
@Autowired
private RestTemplate loadBalancedRestTemplate;
@GetMapping("/consumer/doRestEcho3")
public String doRestEcho3() {
String url = String.format("http://%s/provider/echo/abcd","sca-provider");
return loadBalancedRestTemplate.getForObject(url,String.class );
}