我正在设置一个具有高可用性的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"
}
}
]
这两个选项都将在磁盘上存储消息。它们之间有什么区别?
1条答案
按热度按时间2j4z5cfb1#
为了使消息持久化,我将exchangesandqueuesdurable参数设置为True。
需要说明的是,交换机和队列的
durable
参数不会影响 * 单个 * 消息持久性。durable
参数确保这些交换机和队列在代理重新启动后仍然存在。如果您有一个包含持久消息的非持久队列,并且重新启动代理,则该队列和那些消息将丢失,因此durable
参数很重要。您应该使用
persistent
标志,即使是在延迟队列中。为什么?因为您还应该使用Publisher Confirms,并且只有在设置了persistent
的情况下,消息才会在写入磁盘时得到确认。