RabbitMQ:再次尝试发送消息

时间:2012-12-21 10:34:15

标签: client-server rabbitmq mq

我有 server ,它将消息发送到MQ。当 worker 回答时,从队列中删除消息:

channel.basic_ack(delivery_tag=method_frame.delivery_tag)

但是当工人生成错误时,它不回答有关交付的好处。 是否可以将此消息路由到其他工作人员或将此消息发送到队列末尾,稍后再试。 RabbitMQ是否有机制为消息设置超时。当超时消息时,尝试再次发送给工作人员或者我是否需要自己实现它?

1 个答案:

答案 0 :(得分:1)

如果你的工作人员没有确认该消息,那么它不会从队列中删除,但是如果worker-rabbit-mq之间的连接存在,则rabbit-mq无法知道该消息不在worker的缓冲区中。

有几种方法可以解决这个问题,它主要取决于您的应用程序结构。

最简单的方法是将预取设置为1,并确保在出现问题时重置rabbitmq与工作人员之间的连接。

您也可以查看nacking your messages,但我不知道这是否会重新排列它们。

你当然也可以按照你的说法做,然后发送你进入另一个队列或类似的消息。但是请记住,如果你没有确认你的消息,你最终会有一个比你真正想象的更大的队列,因为兔子不会从队列中删除项目,除非它们被激活(实际上这取决于你的配置)队列)。