spring-cloud - 关于hystrix以及与feign的结合使用

200 阅读1分钟

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。

前提:引入了hystrix和feign的依赖,并且在启动类中已经注解启动。

对于单独使用hystrix,在页面中请求时会出现降级结果:

@GetMapping("/test")
    @HystrixCommand(fallbackMethod = "fallback")
    public String test() {
        throw new RuntimeException("降级了");
    }

    public String fallback() {
        return "降级了";
    }

但是如果是通过feign调用,你会发现hystrix没起作用,所以应该这样设置:
首先在配置文件中加:

feign:
  hystrix:
    enabled: true

然后在@FeignClient中加fallback:

@Component
@FeignClient(value = "searcher", fallback = FallbackTestServiceImpl.class)
public interface TestService {

    @PostMapping("/search")
    String search();
}

然后实现fallback:

@Component
public class FallbackTestServiceImpl implements TestService {
    @Override
    public String search() {
        return "降级了,降级了,降级了";
    }
}

综上可见,其实两种对于hystrix的使用方式是相反的,在controller层单独使用hystrix时,服务是被调者的身份,被浏览器访问时如果出现错误会返回降级信息;而与feign结合使用时,服务是调用者的身份,当它自身调用远程feign失败时,会执行其自定义的fallback。两者结合使用,就可以很好的实现微服务的请求容错。

在这里插入图片描述