【发布时间】:2015-11-24 02:53:36
【问题描述】:
我有一项服务,它通过 RabbitMQ 对工作人员进行处理。消息带有 TTL 发送,worker 直到成功完成消息中发送的任务后才会确认消息。
任务进程将监视工作人员超时,如果工作人员超过超时时间,它将被终止。由于消息没有被确认,消息会立即重新排队,下一个工作人员将接收消息(这在我的场景中很有用,因为工作人员不可靠并且可能会失败,但后续尝试通常会成功。
但是,我还希望能够取消消息。终止和重新创建工作进程是正常过程(它是单线程的,所以我不能向工作人员发送单独的“取消”消息)。但是,如果没有超过 TTL,这样做会导致消息立即重新排队。
我找到的唯一建议解决方案是here,它建议使用单独的数据源来检查消息是否仍然有效。但是,这个答案既 a) 陈旧又 b) 不方便。
RabbitMQ 是否提供了一种在消息放入队列后取消消息的方法?
【问题讨论】:
标签: rabbitmq