Брокер сообщений Message Broker Bus
Зачем
- принцип “глупая шина (канал) умные клиенты”
Плюсы-минусы
Плюсы
- Слабая связность ИС Low Coupling
Минусы
- Дополнительный архитектурный слой
- Затраты на мониторинг, настройку, управление
- влияет на общую надежность и безопасность системы
Patterns
- Advanced transient messaging
- ZeroMQ
- Message-oriented persistent - Message Bus
- Транспорт
- RMQ
- ActiveMQ
- Транспорт
- Log-based message queue
- Messaging Patterns
- MS
- Pub\Sub События
- Task (Worker) Queue
- Очереди с приоритетом
- Content-Based Routing
- Filter message
- Dynamic Router
- Splitter
- Dead Leater Channel
- Message Translator
- Wire Tap - наблюдение за сообщениями
- Event Sourcing
- Тип способа получения сообщений
- Pull (по запросу)
- Push (подписка)
- Как узнать когда сообщение в очередь добавлено - Timestamp
Технологии
- Транспорт
Выбор
RMQ vs Kafka
RabbitMQ
Плюсы:
- Message timing control (controlling either message expiry or message delay).
- Advanced fault handling capabilities, in cases when consumers are more likely to fail to process messages (either temporarily or permanently).
- Advanced and flexible routing rules.
- Simpler consumer implementations.
- перешли на постоянные (persistent) очереди, которые не удаляются в момент разрыва подключения, но повесили на них политику «протухания» (expire), если пользователя нет более 5 минут.
- Приоритет сообщений
Минусы:
- нет параметра Expire для обменников (только для очередей)
- Нет шардирования, в kafka есть topic-несколько partition, есть несколько инстансов где очереди размещены
- Производительность ниже Kafka
Kafka
Плюсы:
- распределенный горизонтально масштабируемый отказоустойчивый журнал коммитов
- Поток событий
- Шардинг из коробки
- Strict message ordering.
- Message retention for extended periods, including the possibility of replaying past messages.
- The ability to reach a high scale when traditional solutions do not suffice.
Минусы:
- Наиболее полно API Kafka поддерживается только в языках Java и Scala. В других языках поддержка не всегда полная, поэтому фреймворки Kafka Connect и Kafka Streams созданы.
- Нет приоритета сообщений