57 lines
3.6 KiB
Markdown
57 lines
3.6 KiB
Markdown
---
|
||
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
|
||
- Имеет плагины расширения
|
||
- Транзакций нет
|
||
- [rabbit-test.zip](rabbit-test.zip) - Пример работы с Rabbit
|
||
- [rabbit-rpc.zip](rabbit-rpc.zip) - Пример реализация rpc на базе Rabbit |