Upload
elena-rumyantseva
View
313
Download
3
Embed Size (px)
DESCRIPTION
Из чего состоит AMQP. Как реализовать шаблоны обмена сообщениями в AMQP.
Citation preview
Взаимодействие сервисов через Advanced Message
Queuing ProtocolПаттерны интеграции
AMQP
2
AMQP (Advanced Message Queuing Protocol) — протокол обмена сообщениями между компонентами системы.
Основные понятия
3
•Сообщение / Message
•Обменник / Exchange
•Очередь / Queue
•Связка / Binding
•Поставщик / Producer
•Потребитель / Consumer
Пример жизненного цикла сообщения
4
Producer
Exchange
создание
отправка
Consumer
Queue
обработка
получение
Binding
доставка
Сообщение / Message
5
•Единица передаваемой информации
•Состоит из заголовка и тела:
•заголовок содержит служебную информацию (в какой обменник и с каким ключом отправить, из какой очереди получить)
• тело содержит непосредственно данные
Поставщик / Producer
6
•Сервис (компонент приложения), формирующий сообщения для потребителей
•Во время отправки сообщения задает обменник и ключ маршрутизации
Потребитель / Consumer
7
•Сервис (компонент приложения), обрабатывающий сообщения, приходящие от поставщиков
•Для получения сообщений указывает очередь, из которой хочет получать сообщения
Обменник / Exchange
8
•Место, в которое отправляются сообщения от поставщика или из других обменников
•Не хранит сообщения
•Бывает трех типов (логика):
• fanout — во все привязанные q/e
• direct — в q/e по совпадению с ключом маршрутизации
• topic — в q/e по маске на ключ маршрутизации
Связка / Binding
9
•Связка задает ключ, по которому очередь или обменник привязываются к обменнику,из которого будут получать сообщения
Очередь / Queue
10
•Хранит сообщения до тех пор, пока их не заберет клиент
Интеграция сервисов
11
•Каналы обмена сообщениями
•Типы сообщений
•Маршрутизация сообщений
•Управление системой
Каналы обмена сообщениями
12
Канал Точка-Точка / Point-to-Point Channel
13
•Имеется один поставщик
•Каждое сообщение будет получено только один раз, даже если имеется несколько потребителей
•Сообщение получает или один потребитель, или конкурирующие потребители
Канал Точка-Точка / Point-to-Point Channel
14
Producer Queue
Consumer
Канал Точка-Точка / Point-to-Point Channel
15
Producer Queue
C CC
Канал Публикация-Подписка / Publish-Suscribe Channel
16
•Имеется один поставщик — «издатель»
•Поставщик должен оповещать всех подписчиков, например, о каком-то событии
•Каждое сообщение должны получить все потребители
17
Exchange
Producer Q С
Канал Публикация-Подписка / Publish-Suscribe Channel
Q С
СQ
Запрос-Ответ / Request-Reply
18
•Служит для организации двухстороннего обмена сообщениями — отправитель может получить ответ от получателя
•Отправитель называется «инициатором запроса» (Requestor)
•Получатель называется «ответчиком», т.к. отправляет сообщение в ответ на пришедшее (Replier)
•Каждое сообщение идет по собственному каналу
19
E
Requestor
Q
Replier
EQ
Запрос-Ответ / Request-Reply
Типы сообщений
20
Сообщение с командой / Command Message
21
•Используется для удаленного вызова команд
•Поставщик указывает в сообщении команду, которую должен выполнить потребитель
•Для передачи обычно используется канал «Точка-Точка»
Сообщение с документом / Document Message
22
•Используется для передачи данных между сервисами
•Сообщение содержит только данные, потребитель сам должен решить, что с ними дальше делать
•Данные более значимы, чем своевременность доставки
•Для передачи используются каналы «Точка-Точка» или «Публикация-Подписка»
Сообщение о событии / Event Message
23
•Используется для оповещения сервисов о том, что в сервисе-отправителе произошло некоторое событие
•Сообщения могут не содержать данных, в этом случае важен сам факт отправки сообщения (факт наступления события)
•Для передачи используются каналы «Точка-Точка» или «Публикация-Подписка»
Маршрутизация
24
Маршрутизация сообщений / Routing
25
•Сообщения, отправляемые поставщиком, необходимо распределять разным получателям в соответствии с некоторой логикой
•При отправке сообщений указывается ключ маршрутизации (routing key), на основе которого обменник понимает, в какую очередь (или какие очереди) сообщение должно попасть
•Типы маршрутизации: fanout, direct, topic
26
Exchangedirect
Producer Q С
Q С
СQ
rk_1
rk_2
rk_3
Маршрутизация сообщений / Routing
27
Exchangetopic
Producer Q С
Q С
СQ
p1.*
p2.*
p3.*
Маршрутизация сообщений / Topic
p4.*
Управление системой: мониторинг и отладка
28
Пульс / Heartbit
29
•Каждый компонент системы периодически отправляет сообщения сервису мониторинга. Сервис мониторинга понимает, что компонент функционирует.
•Сообщения могут содержать какие-то дополнительные сведения о компоненте (кол-во обработанных сообщений, кол-во потребляемой памяти и т. д.)
Тестовые сообщения / Test Messages
30
•Сервис мониторинга отправляет некоторому компоненту тестовые сообщения и проверяет, правильно ли компонент на них реагирует.
Отвод / Wire Tap
31
•Предположим, что передача сообщений между парой сервисов производится по каналу «Точка-Точка»
•Во время тестирования, мониторинга или отладки необходимо отслеживать все сообщения, перемещающиеся по каналу
Отвод / Wire Tap
32
Exchange
Producer
Queue
Consumer
Wire Tap
Журнал доставки сообщений / Message History
33
•Сервис мониторинга собирает информацию о сообщениях
•История сообщений помогает понять, как сервисы взаимодействуют между собой
• Message Store — сохраняем историю сообщений в отдельном хранилище. По этой истории можно строить аналитику.
Журнал доставки сообщений / Message History
E
PQ
MessageHistory
E
C/PQ
С
Дополнительные материалы
35
Enterprise Integration Patterns Шаблоны интеграции корпоративных приложений
http://www.enterpriseintegrationpatterns.com
Дополнительные материалы
36
• Как работает AMQP (симулятор RabbitMQ): http://tryrabbitmq.com
• Реализация базовых шаблонов интеграции на разных ЯП: https://www.rabbitmq.com/getstarted.html