--- aliases: - RabbitMQ tags: - type/moc date: - - 2024-07-02 zero-link: [] parents: - "[[Брокер сообщений]]" linked: --- - Хранит данные в памяти - Гарантия доставки сообщений - at least once delivery. Гарантируется, что наше сообщение получит хотя бы один клиент. Не гарантирует разовую обработку. - at most once delivery. Не гарантирует доставку. - Гарантирует порядок передачи сообщений: FIFO. Если не был выполнен reject. - Имеется возможность сохранения на диск. - Подтверждение отправки/получения. - Ограничение количества отправляемых сообщений. - Управление поведением не полученных сообщений. - [Кластеризация](Кластеризация.md) и [Репликация](_inbox/Репликация.md) из коробки. - Работает через push модель. Данные отправляются на producer. **Терминология:** - [Queue](Queue.md) - Буфер, который хранит messages. Никакой логики. - Connection - [TCP](TCP.md) соединение между приложениями и менеджером очередей. - Channel - Виртуальное соединение внутри Connection. Когда вы публикуете или получаете message через Queue, это все делается в Channel. По факту сессия. - [Exchange](Exchange.md) - получает messages от producer и отправляет его в Queue. Он решает в какую Queue будет помещено message. - Binding - Связь между Queue и Exchange. - Routing Key - Ключ на который смотрит Exchange и решает в какую Queue перенаправить message. - Vhost (virtual host) - Способ разделения приложений на одном и том же экземпляре RabbitMQ. Обработка сообщений в RabbitMQ ![Обработка сообщений в RabbitMQ](Обработка%20сообщений%20в%20RabbitMQ.md) ## Работа с памятью По умолчанию, если RabbitMQ начинает использовать больше 40% от общего объема памяти, то все соединения блокируются. При высвыбождении памяти до порогового значения нормальный процесс работы возобновляется. Порог используемой памяти можно переопределить: ``` rabbitmqctl set_vm_memory_high_watermark 0.5 ``` или перманентно в `/etc/rabbitmq/rabbitmq.config`: ``` [rabbit, [(vm_memory_high_watermark, 0.5)}. ``` ## Заметки - При прочтении сообщения consumer-ом сообщение удаляется из брокера. - Если включить запись сообщений на диск, то теряется скорость, так как сначала сообщения записываются на диск - Написан на Erlang - Имеет плагины расширения - Транзакций нет