Постоянство сообщений RabbitMQ: разница между отложенной очередью и постоянным режимом доставки - PullRequest
0 голосов
/ 07 ноября 2019

Я настраиваю кластер 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": {}
        }
    ]
}

Тогда, кажется, есть 2 варианта:

  • Либо отправка сообщений с 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 Ответ

1 голос
/ 07 ноября 2019

Чтобы включить постоянство сообщений, я установил для параметра длительных обменов и очередей значение True.

Для пояснения, параметр durable для обменов и очередей не влияет на индивидуальный постоянство сообщений. Параметр durable гарантирует, что эти обмены и очереди сохранятся после перезапуска брокера. Правда, если у вас есть недолговременная очередь с постоянными сообщениями и перезапустите посредник, эта очередь и эти сообщения будут потеряны, поэтому параметр durable важен.

Вам следует использовать persistentфлаг, даже с ленивыми очередями. Почему? Поскольку вы также должны использовать Publisher Confirms , и сообщение будет подтверждено только при записи на диск, если установлено persistent.


ПРИМЕЧАНИЕ: команда RabbitMQ контролирует список рассылки rabbitmq-users и только иногда отвечает на вопросы по StackOverflow.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...