Spring Cloud Feign超时设置

 

    根据之前的Feign 源码分析,知道了Feign的整个配置项的加载,接口的动态代理创建和请求的执行过程。那么Hytrix、Feign、Ribbon三个的超时时间设置都会对请求产生影响,完全根据自己的业务进行判断。

1、Hytrix配置

# hystrix 配置
feign:
  hystrix:
    enabled: true
hystrix:
  command:
    default:
      execution:
        isolation:
          strategy: SEMAPHORE
          thread:
            timeoutInMilliseconds: 60000
  shareSecurityContext: true

2、Feign配置

# feign 配置
feign:
  client:
    config:
      default:
        connectTimeout: 10000
        readTimeout: 10000
  compression:
    request:
      enabled: true
    response:
      enabled: true

3、Ribbon配置

全局配置,对所有的@FeignClient生效

ribbon:  
  ReadTimeout: 10000  # 连接超时
  ConnectTimeout: 10000 # 读取超时

应用级配置,比如当前【订单微服务】需要调用【商品微服务】、【价格微服务】等则可以对单个进行配置

@FeignClient(value = "user-provider", contextId = "userService", 
    path = "/api/user", fallback = UserServiceFallback.class)
public interface UserInterface {
    String getUser(@PathVariable("id") Long id);
}
# 对【用户微服务】的ribbon配置,user-provider对应注册中心的服务名
user-provider:
  ribbon:
    OkToRetryOnAllOperations: true # 对所有操作请求都进行重试
    MaxAutoRetries: 2               # 对当前实例的重试次数
    MaxAutoRetriesNextServer: 0    # 切换实例的重试次数
    ConnectTimeout: 3000            # 请求连接的超时时间
    ReadTimeout: 3000               # 请求处理的超时时间

 

### Spring Cloud Feign 中配置超时时间和实现幂等性的最佳实践 #### 配置超时时间 Feign 客户端默认会继承 Ribbon超时设置。为了更精确地控制请求行为,在 `application.yml` 或者 `application.properties` 文件中可以针对特定服务实例来调整连接和读取超时时长: ```yaml ribbon: ReadTimeout: 30000 # 设置Ribbon客户端的读取超时时间为30秒 ConnectTimeout: 5000 # 设置Ribbon客户端的连接超时时间为5秒 feign: client: config: default: connectTimeout: 5000 # 默认情况下所有Feign客户端都将采用此连接超时设定 readTimeout: 30000 # 同样,默认所有的Feign客户端都会应用这个读取超时设定 ``` 对于 Hystrix 超时时间,则可以通过下面的方式进行计算并相应地调整参数以满足业务需求:\[(MaxAutoRetries+1)×(MaxAutoRetriesNextServer+1) × (ConnectTimeout+ReadTimeout)\][^2] 当希望禁用Hystrix功能时,可以在配置文件里添加如下属性关闭它: ```properties feign.hystrix.enabled=false ``` 如果启用了断路器机制并且想要单独为某个微服务定制化其熔断逻辑的话, 可通过定义专门的服务级配置类完成。 #### 实现幂等性处理 幂等操作意味着无论执行多少次都只会产生相同的结果。在分布式环境中确保API接口具备幂等特性非常重要。以下是几种常见的做法: - **唯一事务ID**: 对于每一个外部发起的操作赋予独一无二的标识符,并将其作为HTTP头的一部分传递给下游系统。服务器接收到请求后先检查是否存在相同的事务记录;如果有则直接返回之前响应而不做任何实际变更。 - **版本号/序列号管理**: 使用乐观锁策略,即每次更新资源前获取最新版本信息或自增计数器值一同提交至数据库表单字段内保存起来。一旦发现当前待修改的数据对象已被其他进程抢先一步改动过便会抛出异常提示用户重试直至成功为止。 - **补偿型设计模式**: 当某些不可逆动作发生失败之后尝试采取相反方向上的措施来回滚已生效部分从而达到最终一致性状态的目的。比如支付环节遇到网络波动造成重复扣款现象可通过事后退款方式弥补损失。 综上所述,合理规划好上述提到的各项技术细节有助于提高系统的稳定性和用户体验满意度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值