Spring Cloud OpenFeign实用配置项

在Spring Cloud的微服务项目中使用Feign可以实现远程调用、负载均衡和熔断降级,只需要引入Feign的依赖。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

因为Feign已经包含Ribbon和Hystrix的依赖,所以我们不需要显式地添加Ribbon和Hystrix的依赖。然后在项目启动类上面加上@EnableFeignClients注解,就可以使用Feign了。为了更好的使用Feign,我们需要设置一些配置项,如下所示:

feign:
  hystrix:
    # 启用熔断降级策略
    enabled: true

ribbon:
  # 请求建立连接超时时间,单位:毫秒,默认:2000
  ConnectTimeout: 3000
  # 读取数据超时时间长,单位:毫秒,默认:5000
  # 这里设置为10秒,表示请求发出后,超过10秒没有读取到数据时请求超时
  ReadTimeout: 10000
  # 对所有操作都进⾏重试,默认:false
  OkToRetryOnAllOperations: false
  # 对同一个实例的最大重试次数,默认:0
  MaxAutoRetries: 1
  # 切换实例重试的最大次数,默认:1
  MaxAutoRetriesNextServer: 1

hystrix:
  command:
    default:
      execution:
        timeout:
          # 配置HystrixCommand命令执行是否开启超时,默认:true。
          enabled: true
        isolation:
          # 隔离策略,分为THREAD和SEMAPHORE,默认为THREAD。
          strategy: THREAD
          semaphore:
            # 信号量大小,当隔离策略为信号量时,最大并发请求达到该设置值,后续的请求将被拒绝,默认:10
            maxConcurrentRequests: 100
          thread:
            # 表示设置是否在执行超时时,中断HystrixCommand.run() 的执行,默认:true
            interruptOnTimeout: true
            # hystrixCommand命令执行超时时间,单位:毫秒,默认:1000
            # 首先要考虑接口的响应时间,其次要考虑ribbon的超时时间和重试次数
            timeoutInMilliseconds: 30000

这些配置项已经可以满足大部分的项目,只需要根据项目实际情况,调整配置项的值就可以了。Ribbon可以对单个服务配置负载均衡参数,Hystrix可以对单个接口进行配置,对一些并发量高的项目可以增加Hystrix时间窗口和熔断触发条件的设置,这里我们先对通用配置做介绍。

feign.hystrix.enabled:设置是否使用Hystrix进行熔断,需要就设置为true,不需要的话就设置为false。通常为了防止服务雪崩,都会启用熔断降级策略。

ribbon.ConnectTimeout:这是客户端发出Http请求,建立连接的超时时间。通常建立TCP连接是很快的,这个值不需要设置的太大,除非服务端连接被占满了。

ribbon.ReadTimeout:这是TCP连接建立成功后,客户端发出请求,等待服务端响应的超时时间,如果客户端超过这个时间没有收到服务端的响应数据,那么就超时了。这个值可以根据接口的响应时间进行设置,比正常响应时间大一点就可以了,如果设置的太长,在并发量高的情况下,一旦接口卡住会积压大量请求线程,导致服务拖垮;如果设置的太短,请求结果还没返回就超时,会导致客户端一直取不到数据。

ribbon.OkToRetryOnAllOperations:是否对所有的情况都进行重试。默认值是false,这时只会对连接建立失败进行重试,例如ConnectTimeout会重试,而ReadTimeout不会进行重试。如果设置为true,会对所有的异常进行重试。这个值建议设置为false,除非是只读的接口,对新增或修改的接口进行请求重试,可能会导致数据异常,比如转账,如果接口卡住,进行重试会导致重复转账。

ribbon.MaxAutoRetries:请求异常时,在当前实例上重试的次数。

ribbon.MaxAutoRetriesNextServer:切换到下一个实例进行重试的次数。在当前实例重试后依然失败时,切换到下一个服务实例进行请求,这个参数设置最多可以切换几个服务实例。

hystrix.command.default.execution.timeout.enabled:HystrixCommand命令执行是否开启超时,默认为true,即开启超时。需要注意的是这个超时设置只有在隔离策略为THREAD的时候才有效,如果隔离策略设置为SEMAPHORE,那么hystrixCommand命令执行超时不会起作用。

hystrix.command.default.execution.isolation.strategy:这个参数用来设置Hystix的线程隔离策略,有THREAD(线程池)和SEMAPHORE(信号量)两种。
THREAD:使用线程池中的线程执行hystrixCommand命令,异步执行,存在线程切换,会增加系统开销,并发量会受到线程池中的线程数影响。
SEMAPHORE:使用调用线程执行hystrixCommand命令,同步执行,会被阻塞,适用于延迟低的情况,如果调用外部接口,响应慢的话就不太合适了。虽然使用调用线程执行,但是并发量会受到信号量的限制,超过信号量的调用会被拒绝。如果要使用SEMAPHORE策略的话,一定要根据实际并发量调整信号量的值。

hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests:这个参数用于设置信号量大小,只有当隔离策略为SEMAPHORE时有效,这个值决定了请求的并发量。

hystrix.command.default.execution.isolation.thread.interruptOnTimeout:这个参数用于设置当hystrixCommand命令执行超时,是否中断执行。需要注意的是这个参数只有在隔离策略为THREAD的时候有效。

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds:这个参数用于设置hystrixCommand命令执行超时时间,只有在隔离策略为THREAD的时候有效。这个值的设置需要考虑ribbon的超时时间和重试次数,同时要考虑并发量,线程被用完后会进入队列排队。

版本信息
JDK:1.11
Spring Boot:2.3.9.RELEASE
Spring Cloud:Hoxton.SR9

源码地址
https://gitee.com/shiyonghm/future-spring-cloud-parent

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值