Эта история является кратким изложением онлайн-лекции Уитни Ли на канале IBM Technology Youtube. Подробнее см. в разделе Что такое RabbitMQ.
Введение
Во времена монолитной архитектуры компоненты приложения были тесно связаны. Предположим, мы разрабатываем простое приложение для розничной торговли. Если бы у нас была служба проверки, взаимодействующая со службой инвентаризации через TCP-соединение, у нее были бы некоторые ограничения. Как только служба проверки отправит его в инвентарь, ей нужно будет услышать ответ, прежде чем она сможет перейти к следующей задаче. Или, что еще хуже, если служба инвентаризации выйдет из строя, она будет пытаться снова и снова, пока не сможет установить соединение. Или, если одновременно произойдет много касс, служба инвентаризации не сможет успевать, и вся система захлебнется. Вот почему был создан брокер сообщений.
Преимущества очереди сообщений
С помощью очереди сообщений касса может добавить сообщение в очередь и сразу же перейти к следующей задаче. А инвентарь, когда он будет готов, может потреблять из очереди, обрабатывать сообщение и тут же потреблять следующее. Таким образом, это разъединяет два приложения.
Брокер сообщений также может помочь с масштабируемостью. Если одновременно происходит много проверок, очередь начинает заполняться. Теперь, когда в очереди сообщений может быть несколько потребляющих служб, вы можете справиться с объемом рабочих нагрузок, создаваемых кассой. Это сделает систему более масштабируемой.
Еще одним большим преимуществом очереди сообщений является то, что сама очередь может располагаться на отдельной машине. В этом случае он может разгрузить часть работы, выполняемой веб-приложением, и повысить производительность всей системы.
Что такое RabbitMQ?
RabbitMQ — это реализация модели сообщений AMQP (Advanced Message Queuing Protocol), в частности версии 0-9-1.
Как это работает
Вместо того, чтобы отправлять сообщения напрямую, модель кассового сервиса будет передавать их на биржу, которая похожа на почтовое отделение, получающее и распределяющее все сообщения в нужном месте. Обмен связан со многими очередями через соединения, называемые «привязками», которые представляют собой отношения между обменом и очередью. На привязки ссылаются ключи привязки. Каждая очередь связана с службой-потребителем или потребителем. Потребители подписываются на очереди. Это краткая система, которую мы знаем о RabbitMQ.
Одним из больших преимуществ модели сообщений является гибкость. Эта гибкость в значительной степени частично связана с различными типами обмена.
- Разветвленная биржа: когда касса отправляет сообщение на биржу, она дублирует сообщение и отправляет его во все известные очереди.
- Прямой обмен. При прямом обмене касса создает сообщение с ключом маршрутизации. Ключ маршрутизации сравнивается с ключом привязки, и, если он точно совпадает, он соответствующим образом перейдет в систему.
- Обмен темами: обмен темами соответствует обоим ключам на основе шаблона под названием «тема». В отличие от прямого обмена технически не может быть произвольного ключа маршрутизации — это должен быть список слов, разделенных точками.
- Обмен заголовками. При обмене заголовками ключ маршрутизации полностью игнорируется. Вместо этого сообщение перемещается по всей системе по заголовку.
- Обмен по умолчанию: обмен по умолчанию уникален для RabbitMQ, поскольку он не является частью модели AMQP. Каждая создаваемая очередь автоматически привязывается к ней с помощью ключа маршрутизации, совпадающего с именем очереди.
Основные преимущества RabbitMQ
Огромная гибкость: все конфигурации перемещения сообщения определяются, когда администратор обмена сообщениями настраивает модель сообщения. В RabbitMQ то, как он перемещается по системе, является частью метаданных сообщения. Это приложение и разработчик имеют большой контроль, а не администратор брокера сообщений.
Дружественность к облаку. Вы можете развернуть экземпляр RabbitMQ в Docker или любом программном обеспечении для контейнеризации.
Хорошая безопасность: поддерживает FASL, LDAP и TLS для аутентификации и авторизации.
Подтверждения сообщения. Если сообщение находится в очереди, оно остается до тех пор, пока потребитель не сообщит брокеру, что он извлекает сообщение. Это предотвращает потерю сообщений.
Множество подключаемых модулей. Сообщество разработчиков открытого исходного кода RabbitMQ создало множество подключаемых модулей, расширяющих большинство аспектов RabbitMQ. Он настолько развит, что RabbitMQ теперь поддерживает другие модели сообщений, такие как AMQP 1.0, MQTT, STOMP.
Спасибо за прочтение.