如果我有一个RabbitMQ使用者批量检索100条消息,但在将这些消息标记为已处理之前就会崩溃,那么这些消息是否丢失了?我希望队列中的每条消息至少处理一次。在确认消息之前,有什么推荐的方法来处理那些崩溃的消费者?
RabbitMQ是否以某种方式将它们重新放到了队列中,或者我需要做些什么来实现它呢?
发布于 2017-02-21 19:36:40
在确认消息之前,有什么推荐的方法来处理那些崩溃的消费者?
让rabbitmq为您做所有事情--未被确认的消息将重新排队,并将再次传递给另一个(甚至是相同的)消费者。
RabbitMQ是否以某种方式将它们重新放到了队列中,或者我需要做些什么来实现它呢?
见第一个问题的答案。只是在消息被处理之前不要承认它们。这也意味着确保没有设置auto_ack标志!
如果我有一个RabbitMQ使用者批量检索100条消息,但在将这些消息标记为已处理之前就会崩溃,那么这些消息是否丢失了?
见上面的答案--如果它们被自动确认,它们就会丢失。 引用第二个教程的话,只需参考一下:
如果使用者死掉(通道关闭、连接关闭或TCP连接丢失)而不发送ack,RabbitMQ将理解消息未被完全处理,并将重新排队。如果同时有其他消费者在线,它将很快将其重新交付给另一个消费者。这样,您就可以确保不会丢失任何消息,即使工人偶尔会死。
发布于 2017-02-23 19:17:21
如果消费者必须确认收到的信息,并在此之前死亡,则会发生以下情况:
如果您对同一个队列有多个使用者,或者您的RabbitMQ代理版本小于2.7.0,则第3点将无效。
希望能帮上忙。
https://stackoverflow.com/questions/42375034
复制相似问题