Вопрос проверяет понимание механизмов устойчивости сообщений и очередей в RabbitMQ
RabbitMQ поддерживает устойчивость сообщений и очередей. Чтобы обеспечить сохранение сообщений при перезапуске сервера, очередь должна быть помечена как durable, а сообщения — как persistent (указанием delivery_mode=2 при публикации). Устойчивые очереди сохраняются между перезапусками сервера, но сами сообщения требуют дополнительного указания их устойчивости.
RabbitMQ предоставляет гибкие возможности для настройки устойчивости:
Устойчивость очередей:
Очереди нужно пометить как durable при их создании:
channel.queue_declare(queue='task_queue', durable=True) Это гарантирует, что сама очередь будет доступна после перезапуска RabbitMQ.
Устойчивость сообщений:
Устойчивые сообщения сохраняются на диск:
channel.basic_publish(exchange='',
routing_key='task_queue',
body='Hello World!',
properties=pika.BasicProperties(
delivery_mode=2, # Указывает устойчивость
)) Без установки delivery_mode=2 сообщения будут потеряны при сбоях или перезапуске.
Что важно учитывать:
Даже при настройке устойчивости возможны потери, если RabbitMQ перезагрузится до записи сообщения на диск.
Для полной безопасности сообщений рекомендуется использовать подтверждения доставки (acknowledgments).
RabbitMQ может быть устойчивым, но это требует правильной конфигурации как очередей, так и сообщений.