vesper-bot
@vesper-bot
Любитель файрволлов

Как не потерять данные из очереди RabbitMQ, если они только в памяти, при остановке?

Имеется один сервер RabbitMQ, предназначенный для сохранения внутренних событий некоего процесса (неважно, что он делает, но делает он это ДОЛГО). Процесс можно останавливать, его состояние хранится в очереди и БД. Очередь сконфигурирована как durable, однако судя по тому, что рэбит рапортует о том, что все сообщения лежат у него в памяти, процесс посылает сообщения в очередь без флага persistent. Сам рэббит крутится в докер-контейнере. Потребовалось выполнить снапшот состояния процесса (вместе с его очередью и нижележащей БД), для этого я бы хотел обеспечить, чтобы сообщения в очереди рэббита были сброшены на диск, или при останове, или в процессе работы самого рэббита. Как это сделать? в rabbitmqctl нет подобных команд.
  • Вопрос задан
  • 293 просмотра
Пригласить эксперта
Ответы на вопрос 1
@yarkin
Если сообщения не persistent, то единственный случай, когда RabbitMQ сохранит их на диск это нехватка оперативной памяти (и вроде бы не все сообщения, а только часть). Но даже если сообщение содержит persistent=on RMQ может хранить его копию в памяти как кэш. Так же RMQ не записывает сообщения на диск моментально, а держит сколько-то миллисекунд только в памяти, чтобы можно было аггрегировать запись.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы