一.简介
主要提供了两个功能:
1.服务地址可以直接使用服务名称
2.在执行RestTemplate发送服务地址请求的时候,使用负载均衡拦截器拦截,根据服务名获取服务地址列表,使用Ribbon负载均衡算法从服务地址列表中选择一个服务地址,访问该地址获取服务数据。
二.应用
主要是通过在创建RestTemplate的时候,声明注解(@LoadBalanced)实现下面的两个功能
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3057a1279b2769f63537db0b1bc4ec87.png)
1.服务调用
1.1 在创建ResTemplate的时候,声明@LoadBalanced
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/38b3ebe60a829870d8a03525bc9fb486.png)
1.2 使用ResTemplate调用远程微服务:不需要拼接微服务的URL,以待服务名替换ip地址
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6b14fcf14f1595d02d896c52547b07a3.png)
2.负载均衡
Ribbon是一个典型的客户端负载均衡器,Ribbon会获取服务的所有地址,根据内部的算法获取本次请求的有效地址。
服务端的负载均衡:ngnix 、F5
客户端的负载均衡:Ribbon
2.1.负载均衡客户端的配置:
默认是轮询的方式。
总计有以下几种:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/454e93ac54397100a1d0ee6b2bd4c232.png)
在服务消费端的application.xml更改负载均衡的策略为权重策略:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8ef140006173746af7c8642999adfc10.png)
service-product:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
2.2 具体操作步骤:
1.准备两个微服务提供者(9001,9011)
2.在服务消费者系统中远程以负载均衡的形式去调用商品服务(配置了@LoadBalanced即可实现)
3.重试机制
3.1 在消费者服务端引入spring的重试坐标
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2d4e19e0ddf3c990b686252adffa2b37.png)
<!--引入spring重试坐标-->
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
3.2 对ribbon进行重试配置
#修改ribbon的负载均衡策略 服务名 - ribbon - NFLoadBalancerRuleClassName : 策略
service-product:
ribbon:
# NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
ConnectTimeout: 250 # Ribbon的连接超时时间(创建连接的超时时间-通过消费者到服务者的超时时间,在规定时间没有创建成功请求下一个的连接)
ReadTimeout: 1000 # Ribbon的数据读取超时时间(连接好之后从服务者读取的时间,在这个时间没有返回还会请求重试)
OkToRetryOnAllOperations: true # 是否对所有操作都进行重试
MaxAutoRetriesNextServer: 1 # 切换实例的重试次数(从A到B的次数)
MaxAutoRetries: 1 # 对当前实例的重试次数(A有问题时,请求到B后,隔段时间再次请求A,设置为1表示不重试自己,重试别人)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a9d63c4b22cd17bf9590c405a0c8b46c.png)