暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ribbon的常用配置和重试机制

燕山雷震子 2021-07-06
3279

    在集群环境中,用多个节点来提供服务,难免会有某个节点出现故障。用 Nginx 做负载均衡的时候,如果应用是无状态的、可以滚动发布的,也就是需要一台台去重启应用,这样对用户的影响其实是比较小的,因为 Nginx 在转发请求失败后会重新将该请求转发到别的实例上去。


    由于 Eureka 是基于 AP 原则构建的,牺牲了数据的一致性,每个 Eureka 服务都会保存注册的服务信息,当注册的客户端与 Eureka 的心跳无法保持时,有可能是网络原因,也有可能是服务挂掉了,在这种情况下,Eureka 中还会在一段时间内保存注册信息,这时客户端就有可能拿到已经挂掉了的服务信息,故 Ribbon 就有可能拿到已经失效了的服务信息,这样就会导致发生失败的请求,避免这种问题可以选用重试机制,即当ribbon发现请求的服务不可到达时,重新请求另外的服务;


ribbon重试机制



ribbon自带的retryrule重试:

ribbon-config-demo.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RetryRule


spring的retry重试:

·引入依赖

<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
</dependency>

·配置重试数据:

# 对当前实例的重试次数
ribbon.maxAutoRetries=1
# 切换实例的重试次数
ribbon.maxAutoRetriesNextServer=3
# 对所有操作请求都进行重试
ribbon.okToRetryOnAllOperations=true
# 对Http响应码进行重试
ribbon.retryableStatusCodes=500,404,502


rbbon配置



配置文件方式配置:

(负载均衡器操作接口):

<clientName>.ribbon.NFLoadBalancerClassName: Should implement ILoadBalancer

(负载均衡算法):

<clientName>.ribbon.NFLoadBalancerRuleClassName: Should implement IRule

(服务可用性检查):

<clientName>.ribbon.NFLoadBalancerPingClassName: Should implement IPing

(服务列表获取):

<clientName>.ribbon.NIWSServerListClassName: Should implement ServerList

(服务列表的过滤):

<clientName>.ribbon.NIWSServerListFilterClassName: Should implement ServerList­Filter


代理配置ribbon:

·配置负载策略配置类

@Configuration 

public class BeanConfiguration {    @Bean    public MyRule rule() {        return new MyRule();    } }

·创建ribbon客户端配置类,关联beanconfiguration,用name指定调用的服务名称:

@RibbonClient(name = "ribbon-config-demo", configuration = BeanConfiguration.class) 

public class RibbonClientConfig { }


常用的ribbon配置:

·当不想和eureka集成时,可以配置:

# 禁用 Eureka
ribbon.eureka.enabled=false


·当禁用eureka后需要手动配置调用的服务地址,可以配置如:

# 禁用 Eureka 后手动配置服务地址
service-name-xx.ribbon.listOfServers=localhost:8081,localhost:8083


·ribbon有两种和时间相关的设置,分别是请求连接的超时时间和请求处理的超市时间,设置规则为:

# 请求连接的超时时间
ribbon.ConnectTimeout=2000
# 请求处理的超时时间
ribbon.ReadTimeout=5000
也可以为每个Ribbon客户端设置不同的超时时间, 通过服务名称进行指定:
service-name-xx.ribbon.ConnectTimeout=2000
service-name-xx.ribbon.ReadTimeout=5000


·设置并发参数

# 最大连接数
ribbon.MaxTotalConnections=500
# 每个host最大连接数
ribbon.MaxConnectionsPerHost=500


结语



    今天的分享就到这里,我是雷记,专注于分享关于开发编程相关的技术干货,如果今日的分享对您有帮助的话,还望不吝关注点赞,这对我很重要!如果各位在开发过程中遇到棘手问题,可以扫描下图二维码加入,和雷记与其他小伙伴一起探讨解决,让我们努力让每一个问题都得到解决!

    



聊一聊spring cloud ribbon
聊一聊Nginx、Spring Cloud、Dubbo
聊一聊微服务与springcloud
Java8调试工具 IDEA StreamTrace
ELK整合实战!!(一)基于ELK搭建日志搜集处理-FileBeat
IDEA开发利器之GsonFormatPlus
详细接触Oauth2.0!!
函数式编程-Stream常用流操作
基于Stream整合+重构,让coding爽到飞起!!
Flutter开发环境搭建
文章转载自燕山雷震子,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论