课程名称:SpringCloud Finchley三版本微服务实战
课程章节:
第5章 应用通信
主讲老师:廖师兄
课程内容:
HTTP、RPC,服务之间的负载均衡调用
课程收获:
1、SpringCloud中服务间的两种restful调用方式:
(1).RestTemplate
(2).Feign
2、SpringCLoud服务中的三种通信方式
1、RestTemplate
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。
restTemplate.getForObject(要访问的URL, 用于接受结果的类型.class, 入参)
入参可以使用Map的形式,也可以以可变参数的形式,
定义:
可变参数:
String result = template.getForObject( "url/{count}/{page}", String.class, "5", "1");
//restTemplate会对参数进行URI编码
第一种方式(直接使用RestTemplate,url写死)
RestTemplate restTemplate = new RestTemplate ();
String response = restTemplate.getForObject("http://localhost:8080/msg", String.class );url写死的,只能写一个地址
第二种方式(利用LoadBalanceClient获取url,再使用RestTemplate)
@Autowired
private LoadBalanceClient loadBalanceClient ;
ServiceInstance serviceInstance = loadBalanceClient .choose("PRODUCT");
String url = String.format("http://%s:%s",serviceInstance.getHost(), serviceInstance.getPort() + "/msg");
String response = restTemplate.getForObject(url , String.class);写法麻烦
第三种方式(利用@LoadBalanced可在restTemplate里使用应用名字)
@Component
public class RestTemplateConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
@Autowired
private RestTemplate restTemplate;
String response = restTemplate.getForObject("http://PRODUCT/msg", String.class);3、Ribbon实现软负载均衡核心:
(1)、服务发现:发现依赖服务的列表(依据服务的名字,把所有实例都找出来)
(2)、服务选择规则:依据规则策略如何从多个服务中选择一个有效的服务
(3)、服务监听: 检测失效的服务,做到高效剔除
4、订单查询商品服务
注意要点:
(1)、使用@requestbody注解以后必须使用post提交
(2)、@PathVariable注解对应着get请求