spring-boot - java中的速率限制和节流
问题描述
我需要在我的一个微服务中实现速率限制器/节流。例如,我有一个用户微服务来处理登录并根据角色(如使用 JWT 令牌和注释@Secured 实现的普通用户或普通用户)来处理登录和获取用户数据,所以,我的要求是根据这些调用的 api 进行节流。并且,我应该也可以在运行时修改油门限制。我不想重新发明轮子,所以,有什么想法吗?技术栈:- java、spring boot
解决方案
对此的答案肯定取决于您将节流与什么联系起来。
- 如果您正在考虑根据角色限制 api 返回的数据一段时间,您可以简单地通过使用 spring-boot 缓存来实现。您可以在 springboot-app 中控制缓存驱逐时间(即使您想外部化配置)。
请查看https://spring.io/guides/gs/caching/。此外,如果需要,请查看https://www.youtube.com/watch?v=nfZxXGjXVfc演示。
我没有详细说明缓存是如何完成的,因为它在 springboot 文档中得到了很好的解释。因此,可能必须根据您的需要对其进行调整,但这是您控制节流的第一个答案。
- 如果您正在考虑限制 api 端点本身或限制它可以服务的数据量,即控制号。它可以在几秒钟内提供的请求等。然后你可以
RateLimiter
从 Guava 中使用。
此外,如果您使用的是 springboot,我设法找到了另一个可能更相关的。这是weddini/spring-boot-throttling
似乎第二种方法更适合您的需要。
希望能帮助到你!
推荐阅读
- powershell - 无法更新本地主控目录同步对象的指定属性 - 更新 azure ad 中的用户管理器属性
- javascript - 如何将 django 静态文件放入 javascript 数组中?
- macos - macos下如何检测x86-64程序集中的写错误
- python - 快速计算由 connectedComponents 生成的所有簇的平均颜色
- bash - 如何在bash脚本中为openssl动态生成-extfile参数
- c# - 尝试为 Azure 公共客户端应用程序获取令牌交互时访问被拒绝
- jquery-select2 - 无法将动态数据绑定到 select2 数据源
- python - 使用 ListView 时,上下文未显示在模板中
- react-native - react-native 重新渲染否定过滤器
- python - 用多维数组展平数据框