首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当RabbitMQ使用者崩溃时,获取消息会发生什么?

当RabbitMQ使用者崩溃时,获取消息会发生什么?
EN

Stack Overflow用户
提问于 2017-02-21 18:21:31
回答 2查看 5.9K关注 0票数 11

如果我有一个RabbitMQ使用者批量检索100条消息,但在将这些消息标记为已处理之前就会崩溃,那么这些消息是否丢失了?我希望队列中的每条消息至少处理一次。在确认消息之前,有什么推荐的方法来处理那些崩溃的消费者?

RabbitMQ是否以某种方式将它们重新放到了队列中,或者我需要做些什么来实现它呢?

EN

回答 2

Stack Overflow用户

发布于 2017-02-21 19:36:40

在确认消息之前,有什么推荐的方法来处理那些崩溃的消费者?

让rabbitmq为您做所有事情--未被确认的消息将重新排队,并将再次传递给另一个(甚至是相同的)消费者。

RabbitMQ是否以某种方式将它们重新放到了队列中,或者我需要做些什么来实现它呢?

见第一个问题的答案。只是在消息被处理之前不要承认它们。这也意味着确保没有设置auto_ack标志!

如果我有一个RabbitMQ使用者批量检索100条消息,但在将这些消息标记为已处理之前就会崩溃,那么这些消息是否丢失了?

见上面的答案--如果它们被自动确认,它们就会丢失。 引用第二个教程的话,只需参考一下:

如果使用者死掉(通道关闭、连接关闭或TCP连接丢失)而不发送ack,RabbitMQ将理解消息未被完全处理,并将重新排队。如果同时有其他消费者在线,它将很快将其重新交付给另一个消费者。这样,您就可以确保不会丢失任何消息,即使工人偶尔会死。

票数 12
EN

Stack Overflow用户

发布于 2017-02-23 19:17:21

如果消费者必须确认收到的信息,并在此之前死亡,则会发生以下情况:

  1. RabbitMQ代理将知道消费者不会承认,因为通道已经关闭。
  2. 它会将消息标记为未传递。
  3. 队列中的消息顺序保持不变。
  4. 下一次连接时,队列中的消息将发送给使用者。

如果您对同一个队列有多个使用者,或者您的RabbitMQ代理版本小于2.7.0,则第3点将无效。

希望能帮上忙。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42375034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档