ribbon 远程调用工具(Spring Cloud)

若如初见. 提交于 2020-01-10 03:44:51

1 负载均衡

调用微服务时,在集群服务器中,轮询发送请求

@LoadBalanced 注解添加到RestTemplate

修改请求路径,写服务id, rt.getForObject(“http://item-service/{1}”)
底层是RestTemplate
在微服务中是必须有的

2 重试

  1. MaxAutoretries
    单台服务器的重试次数
    2) MaxAutoretriesNextServer
    向后重试几台服务器
    3) Connecttimeout
    连接超时时间 ; 会引起重试
    4) ReadTimeout
    等待接收响应的超时时间 ; 会引起重试
    5) OkToRetryOnAllOperations
    是否对所有类型请求都重试 ; 默认只对get请求重试

两个超时参数在yml配置中配置无效,需要在代码中配置

3 微服务中必须使用负载均衡么? 微服务中必须使用重试么?重试优缺点是什么?

在微服务架构中,负载均衡是必须使用的技术,通过它来实现系统的高可用、集群扩容等功能。负载均衡可以分为两种:服务端负载均衡和客户端负载均衡。通常所说的负载均衡指服务器负载均衡,

服务器集群时才需要做负载均衡,单台服务器谈不上负载均衡

重试

优点:避免因为网络阻塞导致的连接失败

缺点:可能发生重复的请求操作

微服务中可以不使用负载均衡 缺点:一处爆炸处处爆炸 优点:省钱

微服务中不是必须使用重试 不使用重试优点:速度快 缺点:浪费资源 重试优点:不浪费资源 缺点:浪费时间

负载均衡我觉得是有必要的,因为雨露均沾,不能一家独大。

在微服务架构中,负载均衡是必须使用的技术,通过它来实现系统的高可用、集群扩容等功能.但是此负载均衡不是用nginx实现的服务端的技术,乃是ribbon实现的客户端的技术,将面向服务的 REST 模板请求自动转换成客户端负载均衡的服务调用

负载均衡不一定要用ribbon

4 ribbon 服务消费者

在这里插入图片描述
ribbon 提供了负载均衡和重试功能, 它底层是使用 RestTemplate 进行 Rest api 调用

5 ribbon 负载均衡

1) 添加 ribbon 起步依赖(可选)

eureka 依赖中已经包含了 ribbon
在这里插入图片描述

2) RestTemplate 设置 @LoadBalanced

@LoadBalanced 负载均衡注解,会对 RestTemplate 实例进行封装,创建动态代理对象,并切入(AOP)负载均衡代码,把请求分发到集群中的服务器
在这里插入图片描述

3) 访问路径设置为服务id

在这里插入图片描述
在这里插入图片描述

4) 访问测试

访问测试,ribbon 会把请求分发到 8001 和 8002 两个服务端口上
http://localhost:3001/item-service/34
在这里插入图片描述
在这里插入图片描述

6 ribbon 重试

1) pom.xml 添加 spring-retry 依赖

在这里插入图片描述

2) application.yml 配置 ribbon 重试

在这里插入图片描述

(1) OkToRetryOnAllOperations=true

对连接超时、读取超时都进行重试

(2)MaxAutoRetriesNextServer

更换实例的次数

(3)MaxAutoRetries

当前实例重试次数,尝试失败会更换下一个实例

3) 主程序设置 RestTemplate 的请求工厂的超时属性

在这里插入图片描述

4) item-service 的 ItemController 添加延迟代码,以便测试 ribbon 的重试机制

在这里插入图片描述
在这里插入图片描述

5) 访问,测试 ribbon 重试机制

通过 ribbon 访问 item-service,当超时,ribbon 会重试请求集群中其他服务器
http://localhost:3001/item-service/35
在这里插入图片描述
在这里插入图片描述
ribbon的重试机制,在 feign 和 zuul 中进一步进行了封装,后续可以使用feign或zuul的重试机制

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!