如何使用RabbitMQ对每个用户的速率限制进行多个API调用?

时间:2016-12-07 08:42:35

标签: node.js rabbitmq

在我的应用中,我通过一个API获取代表不同用户的数据,每个用户每2秒钟的速率限制为1个API。

目前我正在存储我需要在单个消息队列中进行的所有调用。我正在使用RabbitMQ。

目前有一位消费者一次收到一条消息,正在接听电话,处理结果,然后从下一条消息开始。

队列的填充速度比这个单个消费者可以进行API调用的速度快(每2秒调用一次,因为我不知道接下来是哪个用户,我不想达到API限制)。

我现在的问题是,我不知道如何添加更多的消费者,理论上这可能是因为队列为不同的用户保留作业,并且API速率限制是每个用户,例如如果来自不同的用户,我可以每2秒进行2次API调用。

但是我没有关于队列中消息的信息。可能来自单个用户,可能来自许多不同的用户。

我现在看到的唯一解决方案是为每个用户创建单独的队列。但是我有很多不同的用户(比如1,000),宁愿呆在一个队列中。

如果可能的话,我会坚持使用RabbitMQ,因为我也将其用于其他类似的任务。但如果我需要改变我的筹码,我愿意这样做。

App正在使用MEAN堆栈。

1 个答案:

答案 0 :(得分:0)

你需要在某处保持一个状态,我有一个类似的应用程序,我做的是在Redis中保持状态,在每次调用之前检查用户是否在最近2秒内发出了请求,例如:

Redis键:

user:<user_id> // value is epoch time-stamp
提出请求后,

更新Redis

<强> refrence:

redis

相关问题