spring-cloud(4)【Hystrix】

1. 断路器逻辑转换




2. Hystrix简介



3. 整合Hystrix

1. 添加依赖

spring-cloud-starter-hystrix

2. 启动类添加注解

@EnableCircuitBreaker  或者 @EnableHystrix

3. 修改controller

在controller方法上加注解@HystrixCommand(fallbackMethod="findByIdForBack")

findByIdForBack为方法名称,入参和返回值和controller方法一样


@HystrixCommand的配置非常灵活,可使用注解@HystrixProperty的commandPropertis属性来配置@HystrixCommand例如:


4. hystrix断路器的状态监控与深入理解

引入srping-boot-starter-actuator
访问/health
关掉服务,会发现执行了会退逻辑。返回了默认数据,但此时hystrix的状态依然是up,这是因为我们的失败率还有打到阈值(默认是5秒内20次失败)。
请求失败,超时,被拒绝以及断路器打开等都会执行回退逻辑。

5. Htstrix线程隔离策略与传播上下文

Hystyix的隔离策略有两种,分别是线程隔离和信号量隔离
  • THREAD(线程隔离):使用盖房时,HystrixCommand将会在单独的线程上执行,发送请求受线程池中的线程数量的限制。
  • SEMAPHORE(信号量隔离):使用该方式,HystrixCommand将会在调用线程上运行,开销相对较小,并发请求受到信号量个数的限制。
一般来说,只有当调用负载非常高的时候,例如每个实例每秒调用数百次,才需要用信号量隔离。因为这种场景下使用THREAD开销会比较高。
信号量隔离一般仅适用于非网络调用的隔离。

可使用excution.isolation.strategy属性指定隔离策略
@HystrixCommand(fallbackMethod="forback",commandProperties={@HystrixProperty(name="execution.isolation.strategy",value="SEMAPHORE")})

如果你想传播线程本地的上下文到@HystrixCommand,默认声明将不会工作,因为它会在线程池中执行命令(在超时的情况下)。你可以使用一些配置,让
Hystrix使用相同的线程,或者直接在注解中让Hystrix使用不同的隔离策略,例如


总结:
  • Hystrix的策略有THREAD和SEMAPHORE两种,默认是THREAD。
  • 正常情况下,保持默认即可。
  • 如果发生找不到上下文的运行时异常,可考虑讲隔离策略设置为SEMAPORE。

6. 为Feign添加回退

1. 添加回退


FeignClinetFallback需要实现UserFeignClinet接口

2. 通过fallbackFactroy检查回退原因

@FeignClient(fallbackFactroy=FeignClinetFallback.class)
FeignClientFallback要实现FallBackFactroy接口

3. 为Feign禁用Hystrix

  • 为单个feign禁用

  • 全局禁用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值