2016-02-17 13 views
2

Я хочу, чтобы в RabbitMQ не было потеряно, если он сработает. Возможно ли каким-то образом дать RabbitMQ дамп или резервное копирование всех очередей, которые он имеет на диске?Как сделать RabbitMQ более надежным? Возможно ли периодически его резервное копирование своих данных (сообщений)?

Я также слышал, что как только он получает сообщения, и даже если он выйдет из строя, когда он появится, сообщение будет доступно.

Итак, что вы рекомендуете, чтобы сделать процесс более надежным?

ответ

1

В RabbitMQ это может быть достигнуто с использованием долговечности очередей и сообщений. Долговечность в очереди означает, что его конфигурация будет сохранена на диске. И когда RabbitMQ восстановится после сбоя, очередь будет восстановлена. Это можно сделать так:

channel.queue_declare(queue='myQueue', durable=True) 

То, что вы ищете, более тесно связано с долговечностью сообщений. Публикуйте все свои сообщения с флагом delivery_mode, установленным в 2. Значение по умолчанию - 1, что делает сообщения только в ОЗУ. См. this для образцов кода в Python. Выдержка ниже.

channel.basic_publish(exchange='', 
        routing_key='task_queue', 
        body=message, 
        properties=pika.BasicProperties(
        delivery_mode = 2, # make message persistent 
       )) 

Обратите внимание, что повышение долговечности сообщения влияет на производительность. Если установлено значение 2, брокер RabbitMQ должен выполнить дополнительную работу для записи сообщений и чтения их с диска.

1

Лучшим способом является создание RabbitMQ cluster, а затем настройка HA policies.

Когда вы настраиваете HA, сообщения реплицируются на другие узлы. Если сбой одного узла, вы можете получить доступ к другим узлам.

Вы также можете создать каталог Mnesia, который обычно содержит конфигурацию и сообщения, но некоторые сообщения могут оставаться в кеше. Чтобы убедиться, что вы должны остановить приложение rabbitmq.

Я бы попробовал использовать HA.

Другой способ резервного копирования непрерывно сообщения использует лопату плагин

Как упомянуто @Milind, используя постоянное сообщение является лучшей практики.

редактировать

Вы облако использовать Tx Transaction пожалуйста, читайте здесь: https://www.rabbitmq.com/blog/2011/02/10/introducing-publisher-confirms/

Tx может решить вашу проблему, но может иметь большое влияние на производительность.

+0

Мне нужен только экземпляр RabbitMQ, кластер - слишком сложное решение. – Steven

+0

@Steven ok, просто отредактируйте ответ. Может быть, может помочь – Gabriele