Message brokers, часть 1: RabbitMQ Оба брокера реализуют пат | Java: fill the gaps
Message brokers, часть 1: RabbitMQ
Оба брокера реализуют паттерн publish/subscribe. Его основные участники это
Producer — отправляет сообщения. Сообщение состоит из ключа, значения и хэдеров
Consumer — принимает сообщения
Message broker — компонент для обмена сообщениями, разворачивается отдельно
Основная структура данных для распределения сообщений — очередь. Обычно в системе целое море продюсеров, очередей и консьюмеров. Чтобы упростить общение между ними, RabbitMQ использует промежуточный слой — exchangers.
Принцип работы:
Продюсеры просто отправляют сообщение в эксченджер. Оттуда оно распределяется в подходящие очереди в зависимости от ключа, хэдеров и настроек эксченджера. Сообщение копируется во все подходящие очереди.
Консьюмер подсоединяется к интересным очередям и забирает оттуда сообщения.
Чтобы было понятно, как это выглядит, посмотрите на картинку внизу поста
Сообщение удаляется из очереди после прочтения. Отсюда идут следующие схемы:
Если сообщение должны прочитать несколько получателей — у каждого должна быть своя очередь, куда это сообщение попадёт.
Пример: сообщение order.from-A.to-C. vip попадает в две очереди — order.from-A.* и order.*.*.vip
Если нужно распределить сообщения между получателями, консьюмеры подключаются к одной очереди. RabbitMQ распределяет сообщения между ними равномерно по принципу round-robin.
Пример: сообщение order.from-A.to-B и order.from-A.to-C распределяются между консюмерами С1 и С2
Рэббит использует push модель — каждое сообщение из очереди вызывает коллбэк на консьюмере. Это нужно, чтобы равномерно распределять сообщения между получателями.
Очереди и связи задаются не в брокере, а в приложении. Роутинг сообщений получается супер гибким, и добавлять новых участников в систему легко. Из разных типов эксченджеров и очередей собирается огромное количество паттернов.
Главное в RabbitMQ:
Основной компонент — exchanger и связанные с ним очереди
Сообщения удаляются после прочтения
Push-модель
Гибкий роутинг сообщений