使用方式
1.直接使用restTemplate,url固定
RestTemplate restTemplate = new TestTemplate();
String response = restTemplate.getForObject(“地址”,返回结果类型.class);
地址可能不唯一,也可能是多个 所以
2.地址不确定 那我就动态获取地址(利用LoadBalancerClient获取url),然后使用restTemplate
SpringCloud中提供了一个LoadBalancerClient
@Autowired
private LoadBalancerClient loadBalancerClient;
ServiceInstance serviceInstance = loadBalancerClient.choose(“服务名”);
String url = String.format(“http://%s:%s”,serviceInstance.getHost(),serviceInstance.getPort()) + “/msg”;
RestTemplate restTemplate = new TestTemplate();
String response = restTemplate.getForObject(url,返回结果类型.class);
代码量太多
3.利用注解LoadBalanced,可在restTemplate里使用应用名字 添加此注解可以为RestTemplate整合Ribbon,使其具备负载均衡的能力
新建包config
@Component
public class RestTemplateConfig{
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
控制器使用
@Autowired
private RestTemplate restTemplate;
restTemplate.getForObject(“http://应用名/msg”,返回结果类型.class);