一句话就是家里的保险丝。
使用注解 @HystrixCommand
实现熔断器。
/**
* 服务熔断
* 在时间窗口期内如果又可以了,那么再次打开开关
* @param id ID
* @return 返回提示信息
*/
@HystrixCommand(fallbackMethod = "paymentCircuitBreakerFallback",
commandProperties = {
@HystrixProperty(name = "circuitBreaker.enabled", value = "true"), // 是否开启熔断器
@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"), // 请求次数
@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "10000"), // 时间窗口期
@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "60") // 失败率达到多少时跳闸
})
public String paymentCircuitBreaker(Integer id) {
if (id < 0) {
throw new RuntimeException("Id不能为负数!");
}
return "调用成功";
}
public String paymentCircuitBreakerFallback(Integer id) {
return "Id 不能为负数,请稍后再试: id = " + id;
}
其中 paymentCircuitBreakerFallback
是熔断触发后要执行的方法。
熔断器在什么时候起作用?
熔断器的特点:
熔断器开启和关闭的条件:
@HystrixCommand
注解完整的配置信息如下: