世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。
前提:引入了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。两者结合使用,就可以很好的实现微服务的请求容错。