Действительно длительная очередь в RabbitMQ

Я проверил "Надежность сообщений" в части руководства RabbitMQ. Но у него есть это примечание:

Пометка сообщений как постоянных не полностью гарантирует, что сообщение не будет потеряно. Хотя он сообщает RabbitMQ сохранить сообщение на диск, все еще существует короткое временное окно, когда RabbitMQ принял сообщение и еще не сохранил его. Кроме того, RabbitMQ не делает fsync(2) для каждого сообщения - он может быть просто сохранен в кеш и не записан на диск

Но что, если мне нужна действительно длительная очередь? Какие лучшие практики я могу использовать? Должен ли я иметь "очередь" в базе данных и некоторый "повтор" в cron, если, например, сообщение не было подтверждено ACK в течение 2 минут? Есть ли лучшие решения?

Кроме того, что, если мой потребитель потерпел крах после того, как обработал сообщение и перед отправкой ACK?

UPD: мой вопрос был помечен как "возможный дубликат" кластерного вопроса. Я понятия не имею, как кластеры могут помочь решить эти проблемы.

2 ответа

Решение

Пожалуйста, прочитайте здесь о гарантированной доставке с Tx

Издатель будет использовать что-то вроде:

ch.txSelect();
ch.basicPublish("", QUEUE_NAME,MessageProperties.PERSISTENT_BASIC,"nop".getBytes());
ch.txCommit();

Примечание: это может убить ваше приложение производительности!

РЕДАКТИРОВАТЬ

Читайте также "Подтверждение издателя" https://www.rabbitmq.com/confirms.html в соответствии с предложением @old_sound

Посмотрите на Подтверждения издателя, которые сделаны для решения проблемы, связанной с тем, чтобы знать, сохранил ли RabbitMQ / повторил ваше сообщение или нет: https://www.rabbitmq.com/confirms.html

Другие вопросы по тегам