RabbitMQ消息持久化:惰性队列和持久化传递模式的区别
RabbitMQ message persistency : difference between lazy queue and persistent delivery mode
我正在设置具有高可用性的 RabbitMQ (v3.8.0) 集群。
为了启用消息持久性,我将交换器和队列 durable 参数设置为 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"
}
}
]
这两个选项都会将消息存储在磁盘上。
它们之间有什么区别?
To enable messages persistency, I set exchanges and queues durable
parameter to True.
澄清一下,交换器和队列的 durable
参数不会影响 individual 消息持久性。 durable
参数确保这些交换器和队列在代理重新启动后仍然存在。的确,如果您有一个包含持久消息的非持久队列,并重新启动代理,该队列和那些消息将会丢失,因此 durable
参数很重要。
你应该使用 persistent
标志,即使是惰性队列。为什么?因为你也应该使用Publisher Confirms,并且只有在设置persistent
时写入磁盘时才会确认消息。
注意: RabbitMQ 团队监控 rabbitmq-users
mailing list 并且有时只在 Whosebug 上回答问题。
我正在设置具有高可用性的 RabbitMQ (v3.8.0) 集群。
为了启用消息持久性,我将交换器和队列 durable 参数设置为 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"
}
}
]
这两个选项都会将消息存储在磁盘上。 它们之间有什么区别?
To enable messages persistency, I set exchanges and queues durable parameter to True.
澄清一下,交换器和队列的 durable
参数不会影响 individual 消息持久性。 durable
参数确保这些交换器和队列在代理重新启动后仍然存在。的确,如果您有一个包含持久消息的非持久队列,并重新启动代理,该队列和那些消息将会丢失,因此 durable
参数很重要。
你应该使用 persistent
标志,即使是惰性队列。为什么?因为你也应该使用Publisher Confirms,并且只有在设置persistent
时写入磁盘时才会确认消息。
注意: RabbitMQ 团队监控 rabbitmq-users
mailing list 并且有时只在 Whosebug 上回答问题。