首页 > 其他分享 >基于时间的断路器

基于时间的断路器

时间:2024-05-17 13:52:06浏览次数:17  
标签:基于 public duration 断路器 时间 threshold id cloud

1 新建一个微服务模块

我们在cloud-payment-service模块中新增一个controller以提供给其它微服务模块调用。

@RestController
public class PayCircuitController {

    @GetMapping("/pay/circuit/{id}")
    public String myCircuit(@PathVariable("id") Integer id){
        if(id == -4) {
            throw new RuntimeException("ID不能为负数");
        }
        if(id == 999) {
            try {
                TimeUnit.SECONDS.sleep(5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        return "Hello Circuit! InputId: " + id + " \t" + IdUtil.simpleUUID();
    }
}

根据ID返回一段字符串,当ID为负数或者999使用特殊处理,其它情况直接返回字符串。

2 编写OpenFeign访问接口

@FeignClient(value = "cloud-payment-service", path = "/pay")
@RestController
public interface PayFeignApi {

    @GetMapping("/circuit/{id}")
    public String myCircuit(@PathVariable("id") Integer id);
}

3 引入依赖

<!-- Circuit断路器       -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</dependency>
<!--   断路器保护需要AOP实现     -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

4 配置文件

resilience4j:
  timelimiter:
    configs:
      default:
        timeout-duration: 10s #
  circuitbreaker:
    configs:
      default:
        failure-rate-threshold: 50 # 设置50%失败打开断路器,超过失败百分比的circuitBreaker变为OPEN状态
        slow-call-duration-threshold: 2s # 慢调用时间阀值
        slow-call-rate-threshold: 30 # 慢调用百分比峰值,断路器时间大于slow-call-duration-threshold就是慢调用,当达到峰值就打开断路器
        sliding-window-type: TIME_BASED # 滑动窗口类型
        sliding-window-size: 2 # 滑动窗口大小配置COUNT_BASED表示6个请求 配置为TIME_BASED表示6s
        minimum-number-of-calls: 2 # 断路器计算失败率或者慢调用率之前所需要的最小样本
        automatic-transition-from-open-to-half-open-enabled: true # 是否开启自动从开启状态过渡到半开状态。默认为true
        wait-duration-in-open-state: 5s # 从OPEN到HALF_OPEN需要等待时间
        permitted-number-of-calls-in-half-open-state: 2 # 半开状态最大请求数
        record-exceptions:
          - java.lang.Exception
    instances:
      cloud-payment-service:
        base-config: default

5 编写业务

@RestController
public class OrderCircuitController {
    @Resource
    private PayFeignApi payFeignApi;

    @GetMapping("/feign/pay/circuit/{id}")
    @CircuitBreaker(name = "cloud-payment-service" , fallbackMethod = "myCircuitFullBack")
    public String myCircuitBreaker(@PathVariable("id") Integer id){
        return payFeignApi.myCircuit(id);
    }

    @Operation(summary = "服务降级后的处理方法")
    public String myCircuitFullBack(Integer id,Throwable e){
        return "系统繁忙,请稍后再试!!";
    }
}

6 测试



标签:基于,public,duration,断路器,时间,threshold,id,cloud
From: https://www.cnblogs.com/wyzstudy/p/18197676

相关文章

  • 基于阿里云实现手机号验证功能
    一、阿里云手机短信验证码服务1.阿里云创建账号https://home.console.aliyun.com/home/dashboard/ProductAndService2.搜索短信服务3.选择签名、资质管理、新增资质4.创建签名5.创建新模版,其中对映签名等信息6.查看模版7.获取ID和Key(1).选中头像,创建AccessKey需......
  • 基于LoRa的智慧农业解决方案--ASR6601、SX1278、SX1262
    我国《数字乡村发展战略纲要》明确指出“要推进农业数字化转型”,加快推广云计算、大数据、物联网、人工智能在农业生产经营管理中的运用。然而,目前我国的农业数字化转型还面临着诸多挑战。我国整体农业机械化程度和自动化控制水平仍然较低。由于农田面积广袤,大量的区域没有信......
  • 基于阿里云实现手机号验证功能
    一、阿里云手机短信验证码服务阿里云创建账号https://home.console.aliyun.com/home/dashboard/ProductAndService搜索短信服务选择签名、资质管理、新增资质创建签名创建新模版,其中对映签名等信息查看模版获取ID和Key(1).选中头像,创建AccessKey......
  • antd-vue 时间选择器限制, 选择不超过七天的范围,且默认时间为当前时间往后七天
    1.template代码<a-range-picker v-model:value="conversationTime" style="margin-right:20px" :disabledDate="disabledDate" @calendarChange="onCalendarChange" @change="onChange" @openChange......
  • 基于Vue3水印组件封装:防篡改守护!
    基于Vue3的全新水印通用组件。这款组件不仅功能强大,而且易于集成,能够轻松为您的网页或应用添加自定义水印,有效防止内容被篡改或盗用。在线查看效果:原文可查看效果地址一,编写watermark组件<template><divref="watermarkContainerRef"class="watermark-container">......
  • 一个Java基于codePoint的emoji判断方法
    该方法参考自一篇博客java判断是否是emoji字符(史上最全)_Mr.QingBin的博客-CSDN博客_java判断emoji经过简单封装如下:publicclassEmojiFilter{privateEmojiFilter(){}/***过滤emoji或者其他非文字类型的字符*如果只需要判断是否含有emoji,使用hasEmoji......
  • 一个Java基于阻塞的定时消费内存队列
     @Getter@AllArgsConstructorpublicenumInsertQueueEnum{A(30000,10,TimeUnit.SECONDS,2,1000),;privatefinalintcapacity;//队列长度privatefinalinttime;//最长阻塞时间privatefinalTimeUnittimeUnit;//最长阻塞时间单位privatefi......
  • 数据分享|SAS与eviews用ARIMA模型对我国大豆产量时间序列预测、稳定性、白噪声检验可
    全文链接:http://tecdat.cn/?p=31480最近我们被客户要求撰写关于ARIMA的研究报告,包括一些图形和统计输出。我国以前一直以来都是世界上大豆生产的第一大国。但由于各国的日益强大,导致我国豆种植面积和产量持续缩减。因此,预测我国的大豆产量对中国未来的经济发展有着极其重要的作......
  • 短语挖掘与流行度、一致性及信息度评估:基于文本挖掘与词频统计|附数据代码
    全文链接:https://tecdat.cn/?p=36193原文出处:拓端数据部落公众号在信息爆炸的时代,文本数据呈现出爆炸式的增长,从新闻报道、社交媒体到学术论文,无处不在的文本信息构成了我们获取知识和理解世界的重要来源。然而,如何从海量的文本数据中提取有价值的信息,尤其是那些能够反映主题、......
  • centos7 设置自动更新时间
    自动更新时间,我这里使用的是ntpdate.从ntpdate手册上看,手册上更建议使用ntpd,以后再学习一些它安装ntpdateyuminstallntpdate时间服务器名称地址???cn.ntp.org.cn阿里云提供的地址ntp2.aliyun.com配置crontab0-59/10****/usr/sbin/n......