2012-12-21 102 views
1

我有服务器哪些发送消息到MQ。消息从队列中删除时工人答案:RabbitMQ:尝试再次发送消息

channel.basic_ack(delivery_tag=method_frame.delivery_tag) 

但是当工作人员产生错误不回答关于交付不错。 是否可以将此消息路由到其他工作人员,或者将此消息发送到队列尾并稍后再试。 RabbitMQ是否具有设置超时消息的机制。当超时结束时,请尝试再次发送给工作人员,还是需要自己执行?

回答

1

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

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

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

你也可以看看nacking your messages但是我不知道这是否会重发他们。

你也可以按照你的说法去做,并发送你进入另一个队列或类似的东西的消息。但是要记住,如果你没有确认你的消息,你最终会得到一个比你想象的更大的队列,因为兔子不会从队列中移除项目,除非它们被占用(实际上这取决于你的配置队列)。

+0

感谢您的回答。我发送了json字符串,我想像TTL那样添加参数。当消息不处理时,我添加一些时间标签并将其返回队列。它不是吗? – Evgeniy

+0

这取决于,我不确定你在说什么样的TTL,是这样的:http://www.rabbitmq.com/ttl.html?或者它只是您传递的JSON对象中的一个值? –

+0

我将关于elemnt的消息告诉了JSON,我在添加并检查它之前处理消息中的数据 – Evgeniy

相关问题