SpringCloud2020微服务实战项目(七)中级 之服务熔断

服务熔断

在这里插入图片描述

断路器

一句话就是家里的保险丝

熔断是什么?

马丁福勒,微服务架构设计理念提出者。
服务熔断
在这里插入图片描述
熔断器 关闭、半开,开。
在这里插入图片描述

实操

在这里插入图片描述

  • 在PaymentHystrixMain8001下的PaymentService添加一下代码
 //===========================服务熔断============================================
    @HystrixCommand(fallbackMethod = "paymentCircuitBreakerFallback",commandProperties = {
            @HystrixProperty(name="circuitBreaker.enabled",value = "true"),//是否开启断路器
            @HystrixProperty(name="requestVolumeThreshold",value = "10"),// 请求次数
            @HystrixProperty(name = "sleepWindowInMilliseconds",value = "10000"),//时间窗口期
            @HystrixProperty(name = "errorThresholdPercentage",value = "60")//失败率达到多少后跳闸
    })
    public String paymentCircuitBreaker(@PathVariable("id") Integer id) {
        if (id < 0) {
            throw new RuntimeException();
        } else {
            String serialNumber = IdUtil.simpleUUID();
            return Thread.currentThread().getName() + "\t " + "调用成功,流水号: " + serialNumber;
        }
    }

    public String paymentCircuitBreakerFallback(@PathVariable("id") Integer id) {
        return "id不能为负数,请稍后再试 id:" + id;
    }
  • 为什么配置这些参数
    可以在HystrixCommandProperties类中查看一下源码:
    在这里插入图片描述 在这里插入图片描述
  • 在PaymentHystrixController中添加,
 //    ***************服务熔断************************
    @GetMapping("/payment/circuit/{id}")
    public String paymentCircuitBreaker(@PathVariable("id") Integer id){
        String circuitBreaker = paymentService.paymentCircuitBreaker(id);
        log.info("******result: "+circuitBreaker);
        return circuitBreaker;
    }

测试
在这里插入图片描述
http://localhost:8001/payment/circuit/31
在这里插入图片描述
http://localhost:8001/payment/circuit/-31
在这里插入图片描述
多次错误,然后慢慢正确,发现刚开始不满足条件,就算是正确的访问地址,得到的结果也是错误的返回信息。说明此时熔断机制打开了,慢慢的默认数秒之后,尝试进入半开half-open,发现是正确的,熔断机制则关闭。
在这里插入图片描述

原理(小总结)

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值