Spring Cloud Hystrix服务降级的实现方式

Netflix的Hystrix在对微服务降级处理实现提供两种方式

通过添加注解@HystrixCommand方式来实现
通过继承HystrixCommand类来实现

1. 使用@HystrixCommand注解实现服务降级

使用注解可以最小程度地侵入代码,可以快速让原来的功能支持服务降级,使用时仅需在要进行服务降级处理的方法上增加@HystrixCommand注解即可,并通过fallbackMethod属性设置该方法在降级处理时所使用的方法,然后在降级方法中实现服务降级逻辑处理,需要注意:通过fallbackMethod所指定的方法要与原方法具有相同的方法签名,否则会降级失败。
@HystrixCommand注解说明如下:

groupKey: 设置HystrixCommand分组的名称
commandKey: 设置HystrixCommand的名称
threadPollKey: 设置HystrixCommand执行线程池的名称
fallbackMethod: 设置HystrixCommand服务降级所使用的方法名称,注意该方法需要与原方法定义在同一个类中,并且方法签名也要一致
commandProperties: 设置HystrixCommand属性,如:断路器失败百分比、断路器时间容器大小等
ignoreException: 设置HystrixCommand执行服务降级处理时需要忽略的异常,当出现异常时不会执行服务降级处理。
observableExecutionMode: 设置HystrixCommand执行的方式
defaultFallback: 设置HystrixCommand默认的服务降级处理方法,如果同时设定了fallbackMethod,会优先使用fallbackMethod所指定的方法,需要注意的是defaultFallback该属性所指定的方法没有参数,需要注意返回值与原方法返回值的兼容性

2. 继承HystrixCommand实现服务降级

除了使用注解方式来完成服务降级实现之外,Hystrix还提供了两个对象来支持服务降级实现处理:HystrixCommand和HystrixObserableCommand,HystrixObserableCommand用于所依赖服务返回多个操作结果的时候,在实现服务降级时,如果是继承HystrixCommand则需要实现getFallback()方法,如果是继承HystrixObserableCommand则需要实现resumeWithFallback()方法

继承HystrixCommand实现服务降级:

import com.netflix.hystrix.HystrixCommand;
import com.netflix.hystrix.HystrixCommandGroupKey;

public class HystrixFallback extends HystrixCommand<String> {

    private String name;

    public HystrixFallback() {

        super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("test")));
    }

    public HystrixFallback(String name) {

        super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("test")));
                this.name = name;
    }

    @Override
    protected String run() throws Exception {
        // 实现具体的业务处理逻辑
        return null;
    }

    @Override
    protected String getFallback() {

        // 实现服务降级处理逻辑
        return super.getFallback();
    }
}

继承HystrixObservableCommand实现服务降级

import com.netflix.hystrix.HystrixCommandGroupKey;
import com.netflix.hystrix.HystrixObservableCommand;
import rx.Observable;

public class HystrixObervableFallback extends HystrixObservableCommand<String> {

    private String name;

    public HystrixObervableFallback() {
        super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("test")));
    }

    public HystrixObervableFallback(String name) {

        super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("test")));
        this.name = name;
    }


    @Override
    protected Observable<String> construct() {
        // 实现具体的业务处理逻辑
        return null;
    }

    @Override
    protected Observable<String> resumeWithFallback() {
        // 实现服务降级处理逻辑
        return super.resumeWithFallback();
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_34004576/article/details/90837701