首页 > 解决方案 > java中的速率限制和节流

问题描述

我需要在我的一个微服务中实现速率限制器/节流。例如,我有一个用户微服务来处理登录并根据角色(如使用 JWT 令牌和注释@Secured 实现的普通用户或普通用户)来处理登录和获取用户数据,所以,我的要求是根据这些调用的 api 进行节流。并且,我应该也可以在运行时修改油门限制。我不想重新发明轮子,所以,有什么想法吗?技术栈:- java、spring boot

标签: spring-bootjava-8throttlingrate-limiting

解决方案


对此的答案肯定取决于您将节流与什么联系起来。

  1. 如果您正在考虑根据角色限制 api 返回的数据一段时间,您可以简单地通过使用 spring-boot 缓存来实现。您可以在 springboot-app 中控制缓存驱逐时间(即使您想外部化配置)。

请查看https://spring.io/guides/gs/caching/。此外,如果需要,请查看https://www.youtube.com/watch?v=nfZxXGjXVfc演示。

我没有详细说明缓存是如何完成的,因为它在 springboot 文档中得到了很好的解释。因此,可能必须根据您的需要对其进行调整,但这是您控制节流的第一个答案。

  1. 如果您正在考虑限制 api 端点本身或限制它可以服务的数据量,即控制号。它可以在几秒钟内提供的请求等。然后你可以RateLimiter从 Guava 中使用。

此外,如果您使用的是 springboot,我设法找到了另一个可能更相关的。这是weddini/spring-boot-throttling

似乎第二种方法更适合您的需要。

希望能帮助到你!


推荐阅读