RabbitMQ - это распределенное промежуточное программное обеспечение для сообщений, разработанное на языке Erlang и с открытым исходным кодом. Он поддерживает Протокол расширенной очереди сообщений (AMQP) и клиентские библиотеки на различных языках программирования, таких как Java, Golang, PHP и Python.

Особенности

  • Надежность: Обеспечивает надежность с помощью сохранения сообщений, поддержки транзакций, подтверждения получения и передачи сообщений и т. д.
  • Механизм маршрутизации: Поддерживает основные модели подписки и потребления, такие как широковещание, подписка, сопоставление заголовков и т. д.
  • Масштабируемость: Несколько узлов RabbitMQ могут объединиться в кластер и динамически расширять кластер в соответствии с фактическими потребностями бизнеса.
  • Высокая доступность: Очереди могут быть настроены как зеркала на узлах кластера, что обеспечивает доступность очередей в случае проблем с некоторыми узлами.
  • Множество протоколов: Помимо поддержки нативного AMQP, RabbitMQ также поддерживает несколько протоколов промежуточного программного обеспечения для обмена сообщениями, таких как STOMP, MQTT и т. д.
  • Клиенты на нескольких языках: RabbitMQ поддерживает практически все используемые языки, такие как Java, Python, Ruby, PHP, C#, JavaScript и т. д.
  • Интерфейс управления: RabbitMQ предоставляет удобный пользовательский интерфейс для мониторинга и управления сообщениями и узлами кластера.
  • Механизм плагинов: RabbitMQ предоставляет множество плагинов для обширного расширения, и пользователи также могут писать свои собственные плагины.

Основные сценарии использования

Асинхронная обработка

Некорейные или менее важные части бизнес-процесса могут быть асинхронно уведомлены целевой системе с помощью уведомлений о сообщениях, позволяя основному бизнес-процессу немедленно реагировать, не синхронно ожидая результатов обработки от других систем.

Декуплирование приложений

Расширение бизнеса может быть достигнуто на основе механизмов подписки на сообщения. Например, в сценарии заказа в электронной коммерции, когда пользователь размещает заказ, генерируется сообщение о заказе. Модуль склада может подписаться на сообщение о заказе для доставки, модуль бонусов - для начисления бонусов, модуль SMS - для отправки текстовых сообщений и так далее.

Снижение пиковой нагрузки

Поскольку может быть различие в возможностях обработки систем вверх по течению и вниз по течению, очереди сообщений могут действовать как регулятор для обеспечения возможности обработки трафика вниз по течению.

Например, в случае успешной оплаты заказа и уведомления складу о доставке, если текущий модуль заказа поддерживает высокую конкурентоспособность 1000, а отгрузка склада поддерживает только 100, внедрение очереди сообщений может позволить модулю склада подписаться на сообщение о заказе и обработать доставку медленно в очереди.

пс: Это похоже на стояние в очереди на метро.