限流器 github的ratelimiter

news/发布时间2024/5/14 8:55:02

一、pom依赖

  <!--限流器--><dependency><groupId>io.github.resilience4j</groupId><artifactId>resilience4j-ratelimiter</artifactId><version>1.7.0</version></dependency>

二、限流器配置

package com.test.config;import io.github.resilience4j.ratelimiter.RateLimiter;
import io.github.resilience4j.ratelimiter.RateLimiterConfig;
import io.github.resilience4j.ratelimiter.RateLimiterRegistry;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.time.Duration;@Configuration
public class RateConfig {@Value("${ratelimit.qps.handshake:100}")private int handshakeQps; // 默认QPS 100@Value("${ratelimit.qps.msg:5000}")private int msgQps;       // 默认QPS 5000//3s内只能发送一次请求@Bean(name = "test")public RateLimiter test() {RateLimiterConfig rateLimiterConfig = RateLimiterConfig.custom().timeoutDuration(Duration.ofMillis(0))                   // 不等待 直接失败.limitRefreshPeriod(Duration.ofMillis(3000))             // 表示每隔多长时间刷新一次限流计数器   这里3s.limitForPeriod(1)                                      // 一个限流周期内允许的最大请求数       这里1次.build();return RateLimiterRegistry.of(rateLimiterConfig).rateLimiter("handshake");}//握手的限流策略(0.1s内允许10个握手连接)@Bean(name = "handshake")public RateLimiter handshakeRateLimiter() {int tenMillis = 10;  // 时间单位同时除 10RateLimiterConfig config = RateLimiterConfig.custom().timeoutDuration(Duration.ofMillis(0))                   // 不等待 直接失败.limitRefreshPeriod(Duration.ofMillis(1000 / tenMillis)) // 按 100ms 刷新 更平滑.limitForPeriod(handshakeQps / tenMillis)                // 平均 QPS.build();return RateLimiterRegistry.of(config).rateLimiter("handshake");}//发送消息的限流策略(0.1s内允许发送500个消息)@Bean(name = "sendMsg")public RateLimiter sendMsgRateLimiter() {int tenMillis = 10;  // 时间单位同时除 10RateLimiterConfig config = RateLimiterConfig.custom().timeoutDuration(Duration.ofMillis(0))                    // 不等待 直接失败.limitRefreshPeriod(Duration.ofMillis(1000 / tenMillis))  // 按 100ms 刷新 更平滑.limitForPeriod(msgQps / tenMillis)                       // 平均 QPS.build();return RateLimiterRegistry.of(config).rateLimiter("sendMsg");}}

三、限流器使用

@RestController
public class TestController {@Resource(name = "test")RateLimiter test;@Resource(name = "handshake")RateLimiter handshake;@Resource(name = "sendMsg")RateLimiter sendMsg;@GetMapping("/test")public String test() {boolean b1 = test.acquirePermission();boolean b2 = handshake.acquirePermission();boolean b3 = sendMsg.acquirePermission();System.out.println("sendMsg: " + b1 + "   handshake: " + b2 + "   sendMsg: " + b3);return "test";}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.bcls.cn/YvWQ/8079.shtml

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

2023 龙蜥操作系统大会演讲实录:《兼容龙蜥的云原生大模型数据计算系统——πDataCS》

本文主要分三部分内容&#xff1a;第一部分介绍拓数派公司&#xff0c;第二部分介绍 πDataCS 产品&#xff0c;最后介绍 πDataCS 与龙蜥在生态上的合作。 杭州拓数派科技发展有限公司&#xff08;简称“拓数派”&#xff0c;英文名称“OpenPie”&#xff09;是国内基础数据计…

论文阅读:SOLOv2: Dynamic, Faster and Stronger

目录 概要 Motivation 整体架构流程 技术细节 小结 论文地址&#xff1a;[2003.10152] SOLOv2: Dynamic and Fast Instance Segmentation (arxiv.org) 代码地址&#xff1a;GitHub - WXinlong/SOLO: SOLO and SOLOv2 for instance segmentation, ECCV 2020 & NeurIPS…

zabbix3.4.6 源码安装

Step1&#xff1a; 下载 https://www.zabbix.com/download 选中一下。download Zabbix Sources PackageReleaseDateRelease NotesZabbix ManualDownloadZabbix 3.4Server, Proxy, Agent, GUI3.4.615 January, 2018 Download step2 &#xff1a;拷贝在redhat 6.3_X86_86(192…

js:通过input标签或Drag拖拽文件实现浏览器文件上传获取File文件对象

文档 https://developer.mozilla.org/zh-CN/docs/Web/API/Filehttps://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/drag_event 通过读取文件可以获取File对象的信息 lastModified: 1707210706000 lastModifiedDate: Tue Feb 06 2024 17:11:46 GMT0800 (中国标准…

11:日志分析系统ELK|Elasticsearch|kibana

日志分析系统ELK&#xff5c;Elasticsearch&#xff5c;kibana 日志分析系统ELKELK概述Elasticsearch安装Elasticsearch部署Elasticsearch集群Elasticsearch插件 熟悉Elasticsearch的API调用_cat API创建 tedu 索引使用 PUT 方式增加数据查询数据修改数据删除数据 KibanaKibana…

MATLAB环境下基于图像处理的视网膜图像血管分割

预防糖尿病对每个人的健康至关重要&#xff0c;而糖尿病的早期症状在眼底视网膜血管会有所体现&#xff0c;如静脉血管扩张、轻度弯曲等。高血压作为常见疾病&#xff0c;在中国有多达2.45亿的患者。高血压的病情也会在眼底视网膜血管上有所体现&#xff0c;如交叉压迫征等反映…

VSCODE include错误 找不到 stdio.h

解决办法&#xff1a; Ctrl Shift P 打开命令面板&#xff0c; 键入 “Select Intellisense Configuration”&#xff08;下图是因为我在写文章之前已经用过这个命令&#xff0c;所以这个历史记录出现在了第一行&#xff09; 再选择“Use gcc.exe ”&#xff08;后面的Foun…

开发自己的node cli

先看效果 资料 掌握 Node CLI 工具开发&#xff0c;为团队研发提效&#xff01; - 掘金还在为提效发愁吗&#xff1f;手把手带你完成 Node CLI 核心开发&#xff0c;深入使用 Node CLI 生态库&#xff0c;文末准备了 190 个Node工具包福利~https://juejin.cn/post/71786666191…

Vue项目创建——每一步都有记录和说明

文章目录 1. 首先下载Node2. 全局安装vue/cli3. 创建Vue项目4. 启动Vue项目 1. 首先下载Node 既然都开始创建Vue项目了&#xff0c;想必大家电脑里面都有Node跟npm了&#xff0c;这里就不赘述了。 2. 全局安装vue/cli vue/cli是什么 vue/cli 是一个全局安装的 npm 包&#x…

光学3D表面轮廓仪微纳米三维形貌一键测量

光学3D表面轮廓仪(白光干涉仪)利用白光干涉原理&#xff0c;以0.1nm分辨率精准捕捉物体的表面细节&#xff0c;实现三维显微成像测量&#xff0c;被广泛应用于材料学领域的研究和应用。 了解工作原理与技术 材料学领域中的光学3D表面轮廓仪&#xff0c;也被称为白光干涉仪&am…

【MATLAB】CEEMDAN_ MFE_SVM_LSTM 神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 CEEMDAN_MFE_SVM_LSTM神经网络时序预测算法是一种结合了多种先进技术的复杂预测方法&#xff0c;旨在提高时序预测的准确性和稳定性。下面是对该算法的详细介绍&#xff1a; CEEMDAN&…

【计算机网络】1.2 网络边缘

1.2 网络边缘 问题一&#xff1a;网络边缘是什么&#xff1f; 答&#xff1a;网络可以大致分为【网络的边缘】和【网络的核心】&#xff0c;网络系统可以大致分为【边缘系统】、【核心系统】、【接入系统】。 处在因特网边缘的部分就是连接在因特网上的所有的主机。这些主机又称…

华为高级路由技术 2023-2024

2023-2024 一、2.26路由协议版本优先级和度量主和备路由最长匹配原则递归路由和默认路由 一、2.26 路由协议版本 &#xff08;1&#xff09;RIP&#xff1a; IPv4网&#xff1a;RIPv1&#xff0c;RIPv2&#xff08;v1和v2 不兼容&#xff09; IPv6网&#xff1a;RIPng(Next g…

【算法小讲堂】#1 贪心算法

引入——关于贪心算法 我们先来做一个小游戏——现在假设自己是一个小偷&#xff0c;桌上有一些物品&#xff0c;包括一台iPhone15、一个充电宝、一个眼罩和一个溜溜梅。此时&#xff0c;你听说警察即将到来&#xff0c;那么你会先带走哪个东西呢&#xff1f; 一般来讲&#xf…

如何在Linux搭建MinIO服务并实现无公网ip远程访问内网管理界面

文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器&#xff0c;可以在各种环境中运行&#xff0c;例如本地、Docker容器、Kubernetes集群等。它兼…

C语言特殊函数

静态函数 背景知识&#xff1a;普通函数都是跨文件可见的&#xff0c;即在文件 a.c 中定义的函数可以在 b.c 中使用。 静态函数&#xff1a;只能在定义的文件内可见的函数&#xff0c;称为静态函数。 语法 staitc void f(void) // 在函数头前面增加关键字 static &#xff…

线代:认识行列式、矩阵和向量

本文主要参考的视频教程如下&#xff1a; 8小时学完线代【中国大学MOOC*小元老师】线性代数速学_哔哩哔哩_bilibili 另外这个视频可以作为补充&#xff1a; 【考研数学 线性代数 基础课】—全集_哔哩哔哩_bilibili 行列式的概念和定义 一般会由方程组来引出行列式 比如一个二阶…

如何在Linux部署Portainer并结合内网穿透远程管理本地Docker容器

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 前言 Portainer 是一个轻量级的容器管理工具&#xff0c;可以通过 Web 界面对 Docker 容器进行管理和监控。它提供了可…

python 提取PDF文字

使用pdfplumber&#xff0c;不能提取扫描的pdf和插入的图片。 import pdfplumberfile_path rD:\UserData\admindesktop\官方文档\1903_Mesh-Models-Overview_FINAL.pdf with pdfplumber.open(file_path) as pdf:page pdf.pages[0]print(page.extract_text()) # 所以文字prin…

MongoDB的介绍和使用

目录 一、MongoDB介绍 二、MongoDB相关概念 三、MongoDB的下载和安装 四、SpringBoot 整合 MongoDB 一、MongoDB介绍 MongoDB是一种NoSQL数据库管理系统&#xff0c;采用面向文档的数据库模型。它以C语言编写&#xff0c;旨在满足大规模数据存储和高性能读写操作的需求。Mo…
推荐文章