1.第一种方式(直接使用RestTemplate ,和url的纯路径获取不同模块的服务)
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject("http://xx", String.class);
缺点,太死板。不能灵活在各个模块间切换
2.第二种方式(通过LoadBalancerClient获取应用名,然后根据应用名获取url,最后根据restTemplate通过url和返回值获得信息) RestTemplate restTemplate = new RestTemplate();
ServiceInstance serviceInstance = loadBalancerClient.choose("ORDER");
String url = String.format("http://%s:%s", serviceInstance.getHost(), serviceInstance.getPort()+"/get/msg");
String result = restTemplate.getForObject(url,String.class);
return result;
3.第三种方式(利用注解@loadBalanced,可在restTemplate里使用应用名字 )这其中使用了负载均衡(随机,轮询。。。)
先把RestTemplate注入Bean容器然后
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
String result = restTemplate.getForObject("http://ORDER/get/msg",String.class);
ribbon的负载均衡