RabbitMQ消息持久化:延迟队列和持久交付模式之间的区别

g9icjywg  于 7个月前  发布在  RabbitMQ
关注(0)|答案(1)|浏览(70)

我正在设置一个具有高可用性的RabbitMQ(v3.8.0)集群。
为了使消息持久化,我将exchanges and queuesdurable参数设置为True。

{
    "exchanges": [
        {
            "name": "my_direct_exchange",
            "vhost": "my_vhost",
            "type": "direct",
            "durable": true,
            "auto_delete": false,
            "internal": false,
            "arguments": {}
        }
    ],
    "queues": [
        {
            "name": "my_queue_direct",
            "vhost": "my_vhost",
            "durable": true,
            "auto_delete": false,
            "arguments": {}
        }
    ]
}

那么,似乎有两个选择:

  • 发送delivery_mode=2的消息
  • 或者,在队列中设置懒惰模式(通过策略配置)
"policies": [
        {
            "vhost": "my_vhost",
            "name": "my_policy",
            "pattern": "",
            "apply-to": "all",
            "definition": {
                "ha-mode": "all",
                "ha-sync-mode": "automatic",
                "queue-mode": "lazy"
            }
        }
    ]

这两个选项都将在磁盘上存储消息。它们之间有什么区别?

2j4z5cfb

2j4z5cfb1#

为了使消息持久化,我将exchangesandqueuesdurable参数设置为True。
需要说明的是,交换机和队列的durable参数不会影响 * 单个 * 消息持久性。durable参数确保这些交换机和队列在代理重新启动后仍然存在。如果您有一个包含持久消息的非持久队列,并且重新启动代理,则该队列和那些消息将丢失,因此durable参数很重要。
您应该使用persistent标志,即使是在延迟队列中。为什么?因为您还应该使用Publisher Confirms,并且只有在设置了persistent的情况下,消息才会在写入磁盘时得到确认。

相关问题