SpringCloud:刨析Hystrix降级策略和调整,服务连接超时配置(实战十)

源码分析Hystrix降级策略和调整

在这里插入图片描述

Ribbo设置超时时间大于服务调用时间还是发回退异常问题:

先看一下服务调用图,订单服务下单调用商品服务,但可能还会调用用户服务,此时商品服务那边可能需要查看商品信息各种复杂操作,用户服务还需要判断此用户是不是作弊用户。这些操作加起来可能有两秒钟,此时就出现问题了,订单服务设置了连接超时,就会返回回退语句,并且发送短信等操作

前一章的熔断实战,模拟了线程睡眠超时2秒,但尽管修改了Fegin里的ribbon超时时间为4秒还是会返回回退。所以光靠ribbo里的超时是不行的,因为使用了hystrix里的超时策略

官方文档:https://github.com/Netflix/Hystrix/wiki/Configuration#execution.isolation.strategy

1.查看默认讲解策略 HystrixCommandProperties

在这里插入图片描述

以下是常用的超时策略,更多的去官方文档

1)execution.isolation.strategy 隔离策略
​ THREAD 线程池隔离(默认)

​ 比如一个请求调用4服务,1000个请求,每个请求个站250个 即使有一个服务有问题,还有750个可用

​ SEMAPHORE 信号量
​ 信号量适用于接口并发量高的情况,如每秒千次调用的情况,导致线程开销过高,通常只适用 于非网络调用,执行速度快

2)execution.isolation.thred.timeoutInMilliseconds 超时时间默认为1秒

​ 就是这里的设置才导致Ribbon即使修改了也不会起作用,调用一个服务超过一秒,hystrix就会断定降级处理返回fallback处理

3)execution.timeout.enable 是否开启超时限制

​ 可以关闭hystrix的超时,但任何一个服务都不能把时间限制关闭,可以设置超时时间长一些

4)execution.isolation.semaphore.maxConcurrentRequests
​ 隔离策略为信号量的时候,如果达到最大并发数时,后续请求会被拒绝,默认是10

2.调整策略

方式一:可以直接加在fallbackMehod方法后,但这种方式不友好

    @HystrixCommand(fallbackMethod = "saveObjectFail",commandProperties = {
            @HystrixProperty(name = "",value = "")
    })

方式二:配置文件修改

#禁用Hystrix超时策略
#hystrix:
#  command:
#    defalut: #default全局有效,service id指定应用有效
#      execution:
#        timeout:
#          #如果enabled设置为false,则请求超时交给ribbon控制,为true,则超时作为熔断根据
#          enabled: false

设置execution.isolation.thred.timeoutInMilliseconds超时时间

#设置Hystrix服务连接超时时间
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 4000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值