【问题标题】:Stop RabbitMQ consumer process current message停止 RabbitMQ 消费者处理当前消息
【发布时间】:2017-07-31 15:01:24
【问题描述】:

我正在 NodeJS 上编写一个处理 CPU 密集型任务的服务。主要思想很简单:

  1. 客户端(浏览器)发送请求
  2. Webserver (NodeJS + ExpressJS) 处理请求:生成 ID,使用该 ID 将任务添加到 RabbitMQ 并使用该 ID 回复客户端。
  3. webserver 将任务添加到 Redis 服务器,ID 为键,{status: active} 为值
  4. 消费者在大约一分钟内处理一项任务并使用派生结果更新 redis 条目。
  5. Client 使用此 ID 检查相应任务的状态。

问题:如果客户端停止询问服务器任务仍在运行,我希望消费者停止处理第 4 步中的任务。如何使用 RabbitMQ 做到这一点?

P.S.:我尝试清除队列但遇到了一些问题:如果消息未被消费者确认,则队列不会被清除。很遗憾here,这只会在我的 CPU 密集型任务完成后才会发生。

【问题讨论】:

    标签: node.js redis rabbitmq message-queue


    【解决方案1】:

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

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

    希望这对其他人有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 2015-10-03
      • 2017-09-23
      • 2016-11-13
      • 2016-11-24
      • 2018-09-18
      • 1970-01-01
      相关资源
      最近更新 更多