Java中的速率限制和限制

时间:2019-08-20 12:00:47

标签: spring-boot java-8 throttling rate-limiting

我需要在我的一个微服务中实现ratelimiter / throttling。 例如,我有一个User微服务,该服务基于Admin或普通用户这样的角色来处理登录并获取用户数据 JWT令牌和注解@Secured,所以,我的要求是基于这些被调用的api进行节流,而且我也应该能够在运行时修改节流限制。 我不想重新发明轮子,所以,有什么想法吗? 技术堆栈:-Java,春季启动

1 个答案:

答案 0 :(得分:0)

对此的答案肯定取决于您与节流有关。

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

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

由于Springboot文档中对此进行了很好的解释,因此我没有详细介绍如何进行缓存。因此,可能必须根据您的需要对其进行调整,但这是控制节流的第一个答案。

  1. 如果您想限制api端点本身或限制它可以服务的数据量,即控制号。它可以在几秒钟之内完成请求的数量等等。然后您可以使用Guava的RateLimiter

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

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

希望有帮助!