一、网络模型介绍
1.1)OSI的七层模型
1.2)每一层都工作着不同设备
1.3)随之出现的问题
SpringCloud更倾向于Http进行通信,实现了语言的解耦,只需要匹配请求接口路径即可。
但是在微服务中很多情况下的请求不是前端触发的,比如下订单,请求从前端打到订单服务,到了订单服务内部逻辑需要请求库存服务。这就发展出一个隔离层,将Web三层架构中表现层分解为(Controller层用于和用户进行Http通信)以及(微服务内部进行RPC通信)——大部分公司外网使用Http,内网使用RPC(较少用OpenFeign)
二、RestTemplate
2.1)什么是RestTemplate
2.2)使用RestTemplate
ribbon-producer
ribbon-consumer
这种通过Ip+Port硬编码的方式没法在线上服务进行灵活的修改,所以引入了服务发现。consumer通过应用名获取服务中心该应用名下的所有provider列表,这样有出现了如何选择列表中的哪一个provider发送请求,由此引入了负载均衡。负载均衡有两种,一种是由客户端自己实现(缺点是不同的语言都需要写一套负载均衡算法);一种是通过引入ribbon,客户端将请求发送给ribbon由ribbon负责具体的负载均衡策略
三、Ribbon
3.1)什么是Ribbon
3.2)微服务中的Ribbon
DiscoveryClient + 自实现负载均衡 + RestTemplate
LoadBalancerClient + RestTemplate
@LoadBalanced + RestTemplate
3.3)Ribbon实现负载均衡原理
3.4)Ribbon的负载均衡策略
自定义负载均衡策略
Ribbon+RestTemplate虽然可以比较少代码量实现A服务调用B服务,还是要一个请求路径然后标注返回值,不像RPC一样从A服务调用B服务感觉像调用本地接口。由此引入了非常像RPC的OpenFeign
四、OpenFeign
4.1)什么是OpenFeign
4.2)OpenFeign的具体实操
使用OpenFeign实现服务间的请求
openfeign-producer
openfeign-consumer
传递基本类型参数
传递基本类型参数——路径
传递对象类型参数
传递数组类型参数
传递集合类型参数
OpenFeign返回值处理
测试OpenFeign默认请求超时时间
修改默认请求超时时间