如何限制Spring应用程序中3个URL(包括全部3个)的每秒10个请求

时间:2017-04-28 06:45:52

标签: java spring spring-mvc

我正在使用第三方服务通过3个网址调用获取RSS提要和其他2个类似服务。

对于所有3个网址,该服务限制为每秒最多10个请求。意味着如果没有第一个网址的呼叫,剩余的2个网址可以在一秒钟内被呼叫10次。如果有3个呼叫第二个网址,那么只有7个呼叫允许一秒钟剩余2个网址。我正在使用Tomcat 7。

无法在春天找到完成任务的方法。如果有人能提出想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

我将介绍一个CallLimiter spring bean - singleton。 bean应该有一个队列 - 最后10个通话时间。

可以将bean添加到需要调用远程API的所有3个位置。

在呼叫之前检查队列中的第一次。 如果它大于1秒,您可以调用远程API并在队列末尾添加当前呼叫时间。如果小于1秒,只需拨打Thread.currentThread().wait(50);(实际上等待时间可能是您喜欢的任何时间)并重复。