- Вернемся к определению и дополним его
- Очередь сообщений - это форма общения сервисов между
собой, используется, в основном, в микросервисных архитектурах приложений.
Общение происходит через сообщения (если проще, это строка). Наше приложение кладет какое-то
сообщение в очередь, другое приложение, которое хочет получить информацию, забирает
это сообщение из очереди.
-
На таком простом механизме строится очень многое в архитектуре микросервисных приложений. Естественно,
общение приложений с помощью очереди сообщений значительно медленнее,
чем напрямую в монолите. Я встречался со временем работы порядка 150-200 мс на 4 последовательных взаимодействия (2 раза положили, 2 вычитали)
Очевидно, что такая задержка будет сказываться на скорости работы приложения и это один из весомых
минусов микросервисной архитектуры.
-
Так исторически сложилось, что в начале разные MQ использовали собственные закрытые протоколы
для передачи данных, что имело ряд проблем.
Например, ограничение операционными системами или языками программирования.
Со временем появились общие стандарты. Рассмотрим самый популярный из всех.
Advanced Message Queuing Protocol (AMQP) — многофункциональный протокол для передачи сообщений между сервисами!
Основная его идея в существовании прослойки между очередью и сервисом, которая называется брокер.
Брокер осуществляет маршрутизацию сообщений по очередям, гарантирует доставку, реализовывает разные функции безопасности
и еще множество разных полезных примочек. Это удобнее, чем напрямую работать с очередью.
Основной механизм работы такой: существует брокер. К нему подключается наш
клиент (сервис). Клиент-producer посылает сообщение на определенную очередь. Брокер его
обрабатывает по своим инструкциям (дублирует в другие очереди, например). Другой клиент-consumer подключается
к этому брокеру и вычитывает нужное сообщение.
Эта прослойка стала незаменимой вещью в системах MQ. Реализована она как отдельное приложение на сервере,
которому можно подключиться, например, по ssl.
Для наглядности покажу вам картинку
Дальше, при обсуждении реализаций MQ, мы будем рассматривать MQ, которые используются, в
основном, при написании приложений на Java.