停止RabbitMQ消费者进程当前消息

时间:2017-03-10 09:59:43

标签: node.js redis rabbitmq message-queue

我正在NodeJS上编写一个处理CPU绑定任务的服务。主要想法非常简单:

  1. 客户(浏览器)发送请求
  2. Webserver (NodeJS + ExpressJS)处理请求:生成ID,使用该ID向RabbitMQ添加任务,并使用该ID回复客户端。
  3. 同样网络服务器将任务添加到 Redis 服务器,其中ID为密钥,{status: active}为值
  4. 消费者在大约一分钟处理任务并使用派生结果更新redis 条目。
  5. 客户端使用此ID检查相应任务的状态。
  6. 问题:如果客户端已停止向服务器询问任务是否仍在运行,我希望使用者停止在步骤4中处理任务。我怎么能用RabbitMQ做到这一点?

    P.S。:我试图清除队列但面临一些问题:如果消息未被消费者确认,则不会清除队列。悲伤here,只有在我的CPU绑定任务完成后才会发生这种情况。

1 个答案:

答案 0 :(得分:0)

我已经弄明白我的清除消费者的问题,但没有使用RabbitMQ,因为没有找到任何API。

正如this answer中提到的那样,我可以在另一个数据库中检查消费者是否应该继续。所以我也决定使用 redis 来达到这个目的:在工作线程中我检查redis中的相应条目,如果密钥尚未过期。

希望这会对其他人有所帮助。