微服务 - Hystrix的使用之服务降级

本文详细介绍了Hystrix的服务降级、熔断和限流功能,包括其工作原理、应用场景及如何在微服务架构中实现这些功能。通过具体的步骤指导,帮助开发者理解并应用Hystrix来提升系统的稳定性和健壮性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hystrix的主要功能包括:服务降级(fallback)、服务熔断(break)、服务限流(flow limit)

【Git相关地址】

  项目地址:https://github.com/Netflix/Hystrix

如何工作参考地址:https://github.com/Netflix/Hystrix/wiki/How-it-Works#flow4
如何使用参考地址: https://github.com/Netflix/Hystrix/wiki/How-To-Use

【服务降级场景】

# 程序代码抛异常
# 服务调用超时
# 服务被熔断
# 线程池满了,没有足够线程去处理请求时

 

【服务端降级方法:】


      step1:Application启动类添加 @EnableCircuitBreaker 注解
      step2:被调用的服务方法上添加@HystrixCommand注解,如下:
       @HystrixCommand(fallbackMethod = "productInfoTimeoutHandler",commandProperties = {
           @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "5000")
       })
      step3:添加fallback处理逻辑方法:productInfoTimeoutHandler

【客户端降级方法:】


      step1:application.yml中添加配置
      feign:
        hystrix:
          enabled: true

      step2:主启动类上添加 @EnableHystrix 注解
      step3:业务类方法上添加:
               @HystrixCommand(fallbackMethod = "paymentInfoTimeoutFallbackMethod",commandProperties = {
                   @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "1500")
               })
      step4:编写paymentInfoTimeoutFallbackMethod处理方法

注:以上方案是1对1的,即在每个方法上配置fallback方法,并编写fallbackMethod,显然会造成代码膨胀,而且耦合度大。所以需要把全局fallback与定制fallback区分对待!优化方案如下:使用注解 -> @DefaultProperties

【定制全局统一fallback:】


  step1:在Controller上添加注解:@DefaultProperties(defaultFallback = "GlobalFallbackMethod")
  step2:在业务方法上添加@HystrixCommand注解
  step3:编写全局降级响应方法:GlobalFallbackMethod

注:该方法只是作用范围仅仅是在一个类里面。
       @DefaultProperties 可以在一个类里面将通用的fallback与需要单独特别处理的fallback进行分开处理。

【最佳方案】

在@FeignClient()注解中配置fallback属性值,指定处理类,该值指向@FeignClient()标识的接口的一个实现类,
该实现类中的方法就是对应的接口中每个方法的fallback方法。

举例:

# 接口

@Component
@FeignClient(value = "CLOUD-PRODUCT-SERVICE", fallback = ProductFallbackService.class)
public interface ProductHystrixService {

  @GetMapping("/product/ok/{id}")
  public String getProductInfo(@PathVariable("id") Integer id);

}

#fallback实现类

@Component
public class ProductFallbackService implements ProductHystrixService {

  @Override
  public String getProductInfo(Integer id) {
    return "Product Service fall back - 商品服务暂时不可用,请稍后再试!";
  }

  // 方法...


}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值