4. Пример жизненного цикла сообщения
4
Producer
Exchange
создание
отправка
Consumer
Queue
обработка
получение
Binding
доставка
5. Сообщение / Message
5
•Единица передаваемой информации
•Состоит из заголовка и тела:
•заголовок содержит служебную информацию (в какой
обменник и с каким ключом отправить, из какой очереди
получить)
•тело содержит непосредственно данные
6. Поставщик / Producer
6
•Сервис (компонент приложения),
формирующий сообщения для
потребителей
•Во время отправки сообщения
задает обменник и ключ
маршрутизации
7. Потребитель / Consumer
7
•Сервис (компонент приложения),
обрабатывающий сообщения,
приходящие от поставщиков
•Для получения сообщений
указывает очередь, из которой
хочет получать сообщения
8. Обменник / Exchange
8
•Место, в которое отправляются
сообщения от поставщика или
из других обменников
•Не хранит сообщения
•Бывает трех типов (логика):
•fanout — во все привязанные q/e
•direct — в q/e по совпадению с ключом маршрутизации
•topic — в q/e по маске на ключ маршрутизации
9. Связка / Binding
9
•Связка задает ключ, по которому
очередь или обменник
привязываются к обменнику,
из которого будут получать
сообщения
13. Канал Точка-Точка / Point-to-Point Channel
13
•Имеется один поставщик
•Каждое сообщение будет получено только один раз, даже если
имеется несколько потребителей
•Сообщение получает или один потребитель, или
конкурирующие потребители
16. Канал Публикация-Подписка /
Publish-Suscribe Channel
16
•Имеется один поставщик — «издатель»
•Поставщик должен оповещать всех подписчиков, например, о
каком-то событии
•Каждое сообщение должны получить все потребители
18. Запрос-Ответ / Request-Reply
18
•Служит для организации двухстороннего обмена сообщениями
— отправитель может получить ответ от получателя
•Отправитель называется «инициатором запроса» (Requestor)
•Получатель называется «ответчиком», т.к. отправляет
сообщение в ответ на пришедшее (Replier)
•Каждое сообщение идет по собственному каналу
21. Сообщение с командой / Command Message
21
•Используется для удаленного вызова команд
•Поставщик указывает в сообщении команду, которую должен
выполнить потребитель
•Для передачи обычно используется канал «Точка-Точка»
22. Сообщение с документом / Document Message
22
•Используется для передачи данных между сервисами
•Сообщение содержит только данные, потребитель сам должен
решить, что с ними дальше делать
•Данные более значимы, чем своевременность доставки
•Для передачи используются каналы «Точка-Точка» или
«Публикация-Подписка»
23. Сообщение о событии / Event Message
23
•Используется для оповещения сервисов о том, что в сервисе-
отправителе произошло некоторое событие
•Сообщения могут не содержать данных, в этом случае важен
сам факт отправки сообщения (факт наступления события)
•Для передачи используются каналы «Точка-Точка» или
«Публикация-Подписка»
25. Маршрутизация сообщений / Routing
25
•Сообщения, отправляемые поставщиком, необходимо
распределять разным получателям в соответствии с некоторой
логикой
•При отправке сообщений указывается ключ маршрутизации
(routing key), на основе которого обменник понимает, в какую
очередь (или какие очереди) сообщение должно попасть
•Типы маршрутизации: fanout, direct, topic
29. Пульс / Heartbit
29
•Каждый компонент системы периодически отправляет
сообщения сервису мониторинга. Сервис мониторинга
понимает, что компонент функционирует.
•Сообщения могут содержать какие-то дополнительные
сведения о компоненте (кол-во обработанных сообщений, кол-
во потребляемой памяти и т. д.)
30. Тестовые сообщения /
Test Messages
30
•Сервис мониторинга отправляет некоторому компоненту
тестовые сообщения и проверяет, правильно ли компонент на
них реагирует.
31. Отвод / Wire Tap
31
•Предположим, что передача сообщений между парой сервисов
производится по каналу «Точка-Точка»
•Во время тестирования, мониторинга или отладки необходимо
отслеживать все сообщения, перемещающиеся по каналу
32. Отвод / Wire Tap
32
Exchange
Producer
Queue
Consumer
Wire Tap
33. Журнал доставки сообщений /
Message History
33
•Сервис мониторинга собирает информацию о сообщениях
•История сообщений помогает понять, как сервисы
взаимодействуют между собой
•Message Store — сохраняем историю сообщений в отдельном
хранилище. По этой истории можно строить аналитику.
36. Дополнительные материалы
36
• Как работает AMQP (симулятор RabbitMQ):
http://tryrabbitmq.com
• Реализация базовых шаблонов интеграции на разных ЯП:
https://www.rabbitmq.com/getstarted.html