【发布时间】:2017-07-31 15:01:24
【问题描述】:
我正在 NodeJS 上编写一个处理 CPU 密集型任务的服务。主要思想很简单:
- 客户端(浏览器)发送请求
- Webserver (NodeJS + ExpressJS) 处理请求:生成 ID,使用该 ID 将任务添加到 RabbitMQ 并使用该 ID 回复客户端。
- 还 webserver 将任务添加到 Redis 服务器,ID 为键,
{status: active}为值 - 消费者在大约一分钟内处理一项任务并使用派生结果更新 redis 条目。
- Client 使用此 ID 检查相应任务的状态。
问题:如果客户端停止询问服务器任务仍在运行,我希望消费者停止处理第 4 步中的任务。如何使用 RabbitMQ 做到这一点?
P.S.:我尝试清除队列但遇到了一些问题:如果消息未被消费者确认,则队列不会被清除。很遗憾here,这只会在我的 CPU 密集型任务完成后才会发生。
【问题讨论】:
标签: node.js redis rabbitmq message-queue