digital-garden/_inbox/00 RabbitMQ.md

3.2 KiB
Raw Blame History

aliases tags date zero-link parents linked
RabbitMQ
type/moc
2024-07-02
Брокер сообщений
  • Хранит данные в памяти

  • Гарантия доставки сообщений

    • at least once delivery. Гарантируется, что наше сообщение получит хотя бы один клиент. Не гарантирует разовую обработку.
    • at most once delivery. Не гарантирует доставку.
  • Гарантирует порядок передачи сообщений: FIFO. Если не был выполнен reject.

  • Имеется возможность сохранения на диск.

  • Подтверждение отправки/получения.

  • Ограничение количества отправляемых сообщений.

  • Управление поведением не полученных сообщений.

  • Кластеризация и Репликация из коробки.

  • Работает через push модель. Данные отправляются на producer.

Терминология:

  • Queue - Буфер, который хранит messages. Никакой логики.
  • Connection - TCP соединение между приложениями и менеджером очередей.
  • Channel - Виртуальное соединение внутри Connection. Когда вы публикуете или получаете message через Queue, это все делается в Channel. По факту сессия.
  • Exchange - получает messages от producer и отправляет его в Queue. Он решает в какую Queue будет помещено message.
  • Binding - Связь между Queue и Exchange.
  • Routing Key - Ключ на который смотрит Exchange и решает в какую Queue перенаправить message.
  • Vhost (virtual host) - Способ разделения приложений на одном и том же экземпляре RabbitMQ.

Обработка сообщений в RabbitMQ Обработка сообщений в RabbitMQ

Работа с памятью

По умолчанию, если RabbitMQ начинает использовать больше 40% от общего объема памяти, то все соединения блокируются. При высвыбождении памяти до порогового значения нормальный процесс работы возобновляется.

Порог используемой памяти можно переопределить:

rabbitmqctl set_vm_memory_high_watermark 0.5

или перманентно в /etc/rabbitmq/rabbitmq.config:

[rabbit, [(vm_memory_high_watermark, 0.5)}.

Заметки

  • При прочтении сообщения consumer-ом сообщение удаляется из брокера.
  • Написан на Erlang
  • Имеет плагины расширения
  • Транзакций нет