digital-garden/_inbox/00 RabbitMQ.md

57 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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](_inbox/Обработка%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