gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 21:24:09 26 4
gpt4 key购买 nike

我正在通过 documentation Rabbitmq 官方网站提供的 AMQP。
它说

Queue Durability Durable queues are persisted to disk and thus survive broker restarts. Queues that are not durable are called transient. Not all scenarios and use cases mandate queues to be durable.

Durability of a queue does not make messages that are routed to that queue durable. If broker is taken down and then brought back up, durable queue will be re-declared during broker startup, however, only persistent messages will be recovered.



但是,当消息代理崩溃时,我对以下情况感到困惑:-
  • 消息由生产者传递到消息交换,但不会路由到标记为持久的队列。
  • 消息由生产者传递到消息交换,然后再路由到标记为持久的队列,但消息在队列中,不被消费者消费。
  • 消息由生产者传递到消息交换,然后再路由到标记为持久的队列,但消息在队列中并被消费者消费,但消费者没有向队列发送确认。

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

    此外,文档区分了普通消息和持久消息,因为只有持久消息才会被恢复。两种消息类型有什么区别?

    提前致谢。

    最佳答案

    代理重启后,持久队列将持续存在。这意味着在重新启动后,队列将自动重新创建,而无需您再次手动创建。这只能确保队列将继续现有 但不是它包含的任何消息。

    现在,持久消息 一旦它们到达队列,就会被写入磁盘 ,这与队列无关(持久与否)。

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

  • 消息将丢失,因为它尚未到达队列。
  • 消息将被恢复,因为它到达了队列。
  • 消息将被恢复并在再次发送时(无论是向同一个消费者还是不同的消费者)再次发送,并带有重新交付的标志。这暗示消费者之前可能已经看过此消息。

  • 请注意,持久消息在非持久队列中无效 ;当服务器重新启动时,不会重新创建队列,因此不会从持久性日志文件中重新创建消息。对于消息可能路由到的每个非持久队列也是如此:一旦消息被路由到非持久队列,它就会从持久性日志文件中删除,不再被视为持久性。

    关于rabbitmq - 当rabbitmq-server 崩溃时,rabbitmq 服务器会恢复标记为持久队列的消息吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49770044/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com