首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当rabbitmq服务器崩溃时,rabbitmq服务器会恢复标记为持久队列的消息吗?

当rabbitmq服务器崩溃时,rabbitmq服务器会恢复标记为持久队列的消息吗?
EN

Stack Overflow用户
提问于 2018-04-11 08:22:03
回答 1查看 2.8K关注 0票数 4

我正在浏览由Rabbitmq官方网站提供的AMQP的文档。上面写着

队列持久性持久队列被持久化到磁盘,从而生存代理重新启动。不能持久的队列称为临时队列。并不是所有的场景和用例任务队列都是持久的。 队列的持久性不会使路由到该队列的消息持久。如果代理被删除,然后重新启动,则在代理启动期间将重新声明持久队列,但是,只有持久消息才会被恢复。

然而,当Message崩溃时,我对以下情况感到困惑:-

  1. 消息由生产者传递到消息交换,但不路由到标记为持久性的队列。
  2. 消息由生产者传递到Message,而后者又将消息路由到标记为持久性的队列,但消息在队列中而不是由使用者使用。
  3. 消息由生产者传递到Message,而后者又将消息路由到标记为持久性的队列,但消息在队列中并由使用者使用,但使用者尚未向队列发送确认。

在所有上述情况下,这些消息在兔子-mq服务器的下一次启动时是否可用?

此外,文档还区分了正常消息和持久消息,因为只有持久消息才会被恢复。这两种消息类型之间有什么区别?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-11 08:45:45

代理重新启动后,持久队列将保持不变。这意味着在重新启动队列后,将自动重新创建队列,而不需要再次手动创建队列。这只会确保队列将继续存在的,但不会包含任何消息.

现在,持久性消息将在到达队列后立即写入磁盘,这与队列无关(不管是否持久)。

所以回答你的问题。如果您希望在重新启动后恢复您的消息,请始终声明它们是持久的。如果是这样的话,您的场景将是:

  1. 消息将丢失,因为它尚未到达队列。
  2. 消息将被恢复,因为它到达了队列。
  3. 当消息再次传递时(无论是同一个使用者还是另一个使用者),将恢复并再次发送带有重新传递标志的消息。这是一种暗示,表明消费者可能以前见过此消息。

注意到,持久性消息在非持久队列中没有任何影响;当服务器重新启动时,队列将不会被重新创建,因此不会从持久化日志文件中重新创建消息。对于消息可能被路由到的每个非持久队列也是如此:一旦消息被路由到一个非持久队列,它就会从持久化日志文件中被删除,并且不再被认为是持久的。

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

https://stackoverflow.com/questions/49770044

复制
相关文章

相似问题

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