Как RabbitMQ фактически сохраняет сообщение физически?

Я хочу знать, как RabbitMQ сохраняет сообщения физически в ОЗУ и диске?

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

Я хотел бы знать об этом внутренности. К сожалению, официальная документация на домашней странице не раскрывает внутренние детали.

Какой документ я должен прочитать для этого?

Ответ 1

RabbitMQ использует собственную базу данных для хранения сообщений, база данных обычно находится здесь:

/var/lib/rabbitmq/mnesia/[email protected]/queues

Начиная с версии 3.5.5, RabbitMQ представил новый Новый кредитный поток https://www.rabbitmq.com/blog/2015/10/06/new-credit-flow-settings-on-rabbitmq-3-5-5/

Давайте посмотрим, как очереди RabbitMQ хранят сообщения. Когда сообщение входит в очередь, очередь должна определить, должно ли сообщение быть сохранено или нет. Если сообщение должно быть сохранено, то RabbitMQ сделает это сразу [3]. Теперь, даже если сообщение было сохранено на диске, это не означает, что сообщение было удалено из ОЗУ, поскольку RabbitMQ хранит кэш сообщений в ОЗУ для быстрого доступа при доставке сообщений потребителям. Всякий раз, когда мы говорим о подкачке сообщений на диск, мы говорим о том, что делает RabbitMQ, когда ему приходится отправлять сообщения из этого кэша в файловую систему.

Этот пост блога достаточно подробный.

Я также предлагаю прочитать о ленивой очереди: https://www.rabbitmq.com/lazy-queues.html и https://www.rabbitmq.com/blog/2015/12/28/whats-new-in-rabbitmq -3-6-0/

Ленивые очереди Этот новый тип очередей работает, отправляя каждое доставленное им сообщение прямо в файловую систему и загружая сообщения в ОЗУ только тогда, когда потребители приходят в очереди. Для оптимизации чтения с диска сообщения загружаются партиями.