Hystrix服务熔断

Payment8001里试验:

@Service
public class HystrixPaymentService {
    /**
     *
     *模拟服务熔断
     * 这里的意思是: 在10秒的时间窗口期内,请求次数超过十次,失败率达到30%,就打开服务熔断
     */
    @HystrixCommand(fallbackMethod = "circuitBreakerCallbackMethod", commandProperties = {
            @HystrixProperty(name="circuitBreaker.enabled",value="true"),   // 打开服务熔断
            @HystrixProperty(name="circuitBreaker.requestVolumeThreshold",value="10"),  //请求次数
            @HystrixProperty(name="circuitBreaker.sleepWindowInMilliseconds",value="10000"),  //时间窗口期
            @HystrixProperty(name="circuitBreaker.errorThresholdPercentage",value="30")  // 失败达到多少后跳闸
    })
    public String paymentCircuitBreaker(@PathVariable("id") Integer id) {
        if(id < 0) {
            throw new RuntimeException("id不能为负数");
        }
        String serialNumber = UUID.randomUUID().toString();
        return Thread.currentThread().getName() + "调用成功,流水号为: " + serialNumber;
    }

    public String circuitBreakerCallbackMethod(@PathVariable("id") Integer id) {
        return "id不能为负数,启动了服务熔断..." + id;
    }
}

controller:

@RestController
@Slf4j
public class HystrixPaymentController {
    @Resource
    HystrixPaymentService service;
    @GetMapping("/payment/circuit/{id}")
    public String paymentCircuitBreaker(@PathVariable("id") Integer id) {
        return service.paymentCircuitBreaker(id);
    }
}

测试:

这里不停的调用:

http://localhost:8001/payment/circuit/-12 之后再调用http://localhost:8001/payment/circuit/1 出现服务降级。

过一段时间才恢复(一般五秒) 

 

 

 遗留的问题:

 

 为什么设置了也还是使用默认值。

 

posted @ 2021-05-27 11:05  圣金巫灵  阅读(86)  评论(0编辑  收藏  举报