Hystrix服务降级机制

Hystrix服务降级

使用方法

  1. pom
		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
  1. 启动类
@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker
public class PaymentHystrixMain {
    public static void main(String[] args) {
        SpringApplication.run(PaymentHystrixMain.class,args);
    }
}
  1. 具体业务添加降级处理方法 @HystrixCommand中fallbackMethod方法
 @Override
    @HystrixCommand(fallbackMethod = "paymentInfoTimeoutMethod",commandProperties = {
            @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value = "3000")
    })
    public String paymentInfoTimeout(Integer id) {
        int timeNumber = 5;
        //暂停三秒
        try {
            TimeUnit.SECONDS.sleep(timeNumber);
        }catch (InterruptedException e) {
            e.printStackTrace();
        }
        return Thread.currentThread().getName()+"paymentInfoTimeout,id"+"\t"+id;

    }

    public String paymentInfoTimeoutMethod(Integer id){
        return Thread.currentThread().getName()+"paymentInfoTimeoutMethod,id:"+"\t"+id;
    }

代码缺点

  • 每个业务都有一个对应降级处理方法,代码膨胀
  • 和业务逻辑混在一起,代码耦合性高

解决方法

  1. 配置通用的fallback方法
    利用以下注解:
    @DefaultProperties(defaultFallback = “payment_global_fallbackMethod”)+ @HystrixCommand
    实现除了个别重要核心业务专属配置降级处理方法外,其他普通的均通过@DefaultProperties中的defaultFallback方法处理
    好处:将通用和独享分开,避免了代码膨胀,合理减少了代码量

  2. 整合feign,利用feign调用其他服务接口

  • 在yml中开启feign对hystrix的支持
    feign:
     	 hystrix:
       	 enabled: true   #在feign中开启hystrix
    
  • 定义fallback处理类
    @Component
    @FeignClient(value = "CLOUD-PROVIDER-HYSTRIX-PAYMENT",fallback = PaymentFallBackServiceImpl.class)
    public interface PaymentService {
    	
        @GetMapping("/payment/hystrix/ok/{id}")
        public String paymentInfoOk(@PathVariable(value = "id")Integer id);
    
        @GetMapping("/payment/hystrix/timeout/{id}")
        public String paymentInfoTimeout(@PathVariable(value="id")Integer id);
    }
    
  • 实现feign调用接口服务类,在客户端自己实现服务降级处理
    @Component
    public class PaymentFallBackServiceImpl implements PaymentService {
        @Override
        public String paymentInfoOk(Integer id) {
            return "服务降级:解耦处理,交给feign调用其他服务接口进行处理,paymentInfoOk";
        }
    
        @Override
        public String paymentInfoTimeout(Integer id) {
            return "服务降级:解耦处理,交给feign调用其他服务接口进行处理,paymentInfoTimeout";
        }
    }
    

好处:客户端自己做了服务降级处理,若此时其他服务端不可用或者宕机,会给客户端提示信息,从而不会挂起耗死服务器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Cloud Hystrix是一个开源的熔断器框架,它能够帮助开发者有效地处理服务依赖中的延迟和故障。熔断器的主要目的是在出现故障时提供一种优雅的降级机制,以避免整个系统的崩溃。 熔断和降级是Hystrix中两个重要的概念。 熔断(Circuit Breaker)指的是在服务出现故障或错误率过高时,自动地切换到指定的备用服务或返回事先定义好的错误结果,起到保护系统免受故障传播的影响的作用。当服务不可用或响应时间过长时,熔断器会打开,拒绝后续请求的访问,并尝试通过执行降级逻辑来快速响应客户端。一旦后续请求不再出现故障,熔断器将会进入半开状态,允许少量的请求通过以检测服务是否恢复正常。 降级(Degradation)指的是在系统资源不足或者高访问量时,服务降级会关闭一些不重要的功能,以保证系统核心功能的可用性和稳定性。降级可以通过阻止非必要的调用、减少资源的消耗以及返回默认值或缓存结果来实现。降级需要提前定义好一些备用的逻辑,一旦系统资源紧张,就可以立即启用降级逻辑来保障系统的可用性。 总而言之,熔断和降级都是为了保护系统免受故障的影响。熔断主要是针对服务故障和错误率过高的情况,通过切换到备用服务或返回错误结果来保护系统。降级主要是在系统资源紧张或高访问量的情况下,关闭一些不重要的功能来保证核心功能的可用性和稳定性。两者都是通过提前定义备用逻辑来保障系统的正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值