返回 导航

SpringBoot / Cloud

hangge.com

SpringCloud - 声明式服务调用组件Feign使用详解4(Ribbon配置)

作者:hangge | 2020-07-31 08:10
    由于 Spring Cloud Feign 的客户端负载均衡是通过 Spring Cloud Ribbon 实现的,所以我们可以直接通过配置 Ribbon 客户端的方式来自定义各个服务客户端调用的参数。下面通过样例进行演示。

四、Ribbon 配置

1,全局配置

    全局配置的方法非常简单,我们可以直接使用 ribbon.<key>=<value> 的方式来设置 ribbon 的各项默认参数。比如,修改默认的客户端调用超时时间:
#请求连接超时时间
ribbon.ConnectTimeout=500
#请求处理的超时时间
ribbon.ReadTimeout=1000

2,指定服务配置

    大多数情况下,我们对于服务调用的超时时间可能会根据实际服务的特性做一些调整,所以仅仅依靠默认的全局配置是不行的。在使用 Spring Cloud Feign 的时候,针对各个服务客户端进行个性化配置的方式与使用 Spring Cloud Ribbon 时的配置方式是一样的,都采用 <client>.ribbon.<key>=<value> 的格式进行设置。

(1)我们可以使用 @FeignClient 注解中的 namevalue 属性值来设置对应的 Ribbon 参数,比如下面代码:我们使用如下代码创建 Feign 客户端的时候,同时也会创建一个名为 HELLO-SERVICERibbon 客户端。
@FeignClient("hello-service")
public interface HelloService {
     
    @RequestMapping("/hello")
    String hello();
}

(2)因此该服务对应的 Ribbon 参数可以按照如下形式设置:
#请求连接超时时间
hello-service.ribbon.ConnectTimeout=500
#请求处理的超时时间
hello-service.ribbon.ReadTimeout=1000

3,重试机制

    在 Spring Cloud Feign 中默认实现了请求的重试机制,下面配置作用是:当访问到故障请求的时候,它会再尝试访问一次当前实例(次数由 MaxAutoRetries 配置),如果不行,就换一个实例进行访问,如果还不行,再换一次实例访问(更换次数由 MaxAutoRetriesNextServer 配置),如果依然不行,返回失败信息。
注意Ribbon 的超时与 Hystrix 的超时是两个概念。为了让上述实现有效,我们需要让 Hystrix 的超时时间大于 Ribbon 的超时时间,否则 Hystrix 命令超时后,该命令直接熔断,重试机制就没有任何意义了。
#断路器的超时时长需要大于Ribbon的超时时间,不然不会触发重试
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=10000

#请求连接超时时间
hello-service.ribbon.ConnectTimeout=500
#请求处理的超时时间
hello-service.ribbon.ReadTimeout=1000
#对所有请求都进行重试(是否所有操作都重试,若false则仅get请求重试)
hello-service.ribbon.OkToRetryOnAllOperations=true
#对当前实例的重试次数
hello-service.ribbon.MaxAutoRetries=1
#切换实例的重试次数
hello-service.ribbon.MaxAutoRetriesNextServer=2
评论

全部评论(0)

回到顶部