RabbitMQ - это распределенное промежуточное программное обеспечение для сообщений, разработанное на языке Erlang и с открытым исходным кодом. Он поддерживает Протокол расширенной очереди сообщений (AMQP) и клиентские библиотеки на различных языках программирования, таких как Java, Golang, PHP и Python.
Особенности
- Надежность: Обеспечивает надежность с помощью сохранения сообщений, поддержки транзакций, подтверждения получения и передачи сообщений и т. д.
- Механизм маршрутизации: Поддерживает основные модели подписки и потребления, такие как широковещание, подписка, сопоставление заголовков и т. д.
- Масштабируемость: Несколько узлов RabbitMQ могут объединиться в кластер и динамически расширять кластер в соответствии с фактическими потребностями бизнеса.
- Высокая доступность: Очереди могут быть настроены как зеркала на узлах кластера, что обеспечивает доступность очередей в случае проблем с некоторыми узлами.
- Множество протоколов: Помимо поддержки нативного AMQP, RabbitMQ также поддерживает несколько протоколов промежуточного программного обеспечения для обмена сообщениями, таких как STOMP, MQTT и т. д.
- Клиенты на нескольких языках: RabbitMQ поддерживает практически все используемые языки, такие как Java, Python, Ruby, PHP, C#, JavaScript и т. д.
- Интерфейс управления: RabbitMQ предоставляет удобный пользовательский интерфейс для мониторинга и управления сообщениями и узлами кластера.
- Механизм плагинов: RabbitMQ предоставляет множество плагинов для обширного расширения, и пользователи также могут писать свои собственные плагины.
Основные сценарии использования
Асинхронная обработка
Некорейные или менее важные части бизнес-процесса могут быть асинхронно уведомлены целевой системе с помощью уведомлений о сообщениях, позволяя основному бизнес-процессу немедленно реагировать, не синхронно ожидая результатов обработки от других систем.
Декуплирование приложений
Расширение бизнеса может быть достигнуто на основе механизмов подписки на сообщения. Например, в сценарии заказа в электронной коммерции, когда пользователь размещает заказ, генерируется сообщение о заказе. Модуль склада может подписаться на сообщение о заказе для доставки, модуль бонусов - для начисления бонусов, модуль SMS - для отправки текстовых сообщений и так далее.
Снижение пиковой нагрузки
Поскольку может быть различие в возможностях обработки систем вверх по течению и вниз по течению, очереди сообщений могут действовать как регулятор для обеспечения возможности обработки трафика вниз по течению.
Например, в случае успешной оплаты заказа и уведомления складу о доставке, если текущий модуль заказа поддерживает высокую конкурентоспособность 1000, а отгрузка склада поддерживает только 100, внедрение очереди сообщений может позволить модулю склада подписаться на сообщение о заказе и обработать доставку медленно в очереди.
пс: Это похоже на стояние в очереди на метро.