停止 RabbitMQ 消费者进程当前消息
Stop RabbitMQ consumer process current message
我正在 NodeJS 上编写一个处理 CPU 绑定任务的服务。主要思想很简单:
- 客户端(浏览器)发送请求
- Webserver (NodeJS + ExpressJS) 处理请求:生成 ID,使用该 ID 添加任务到 RabbitMQ,并使用该 ID 回复客户端。
- 同时 webserver 将任务添加到 Redis 服务器,ID 作为键,
{status: active}
作为值
- 消费者在大约一分钟内处理一个任务并用派生的结果更新redis条目。
- 客户端使用此ID查看相应任务的状态。
问题:如果客户端已经停止询问服务器任务仍在进行中,我希望消费者停止处理步骤4中的任务运行。我如何使用 RabbitMQ 做到这一点?
P.S.: 我尝试清除队列但遇到了一些问题:如果消费者未确认消息,则不会清除队列。可悲的是 here,这只会在我的 CPU 绑定任务完成后才会发生。
我已经解决了清除消费者的问题,但没有使用 RabbitMQ,因为没有找到任何 API。
正如在 this answer 中提到的那样,我可以在另一个数据库中检查消费者是否应该继续。因此,我决定也为此目的使用 redis:在工作线程中,如果密钥尚未过期,我会检查 redis 中的相应条目。
希望这对其他人有所帮助。
我正在 NodeJS 上编写一个处理 CPU 绑定任务的服务。主要思想很简单:
- 客户端(浏览器)发送请求
- Webserver (NodeJS + ExpressJS) 处理请求:生成 ID,使用该 ID 添加任务到 RabbitMQ,并使用该 ID 回复客户端。
- 同时 webserver 将任务添加到 Redis 服务器,ID 作为键,
{status: active}
作为值 - 消费者在大约一分钟内处理一个任务并用派生的结果更新redis条目。
- 客户端使用此ID查看相应任务的状态。
问题:如果客户端已经停止询问服务器任务仍在进行中,我希望消费者停止处理步骤4中的任务运行。我如何使用 RabbitMQ 做到这一点?
P.S.: 我尝试清除队列但遇到了一些问题:如果消费者未确认消息,则不会清除队列。可悲的是 here,这只会在我的 CPU 绑定任务完成后才会发生。
我已经解决了清除消费者的问题,但没有使用 RabbitMQ,因为没有找到任何 API。
正如在 this answer 中提到的那样,我可以在另一个数据库中检查消费者是否应该继续。因此,我决定也为此目的使用 redis:在工作线程中,如果密钥尚未过期,我会检查 redis 中的相应条目。
希望这对其他人有所帮助。