3. Сообщение
• Как организовать обмен данными между приложениями?
• Сообщение – атомарная единица переданной
информации.
Сообщение содержит:
• Заголовок сообщения.
Служебная
информация,
используемая
сообщениями (СОС). Например, адрес
получателя.
• Тело сообщения.
Данные, передаваемые с помощью СОС.
системой
обмена
отправителя, адрес
4. Канал сообщений
• Как передать сообщения от одного приложения к
другому?
• Соединить приложения с помощью канала сообщений.
Канал доставляет помещенные в него сообщения от
отправителя к получателю.
5. Фильтры сообщений
• Как сделать приложение гибким и независимым?
• Надо разделить сложную задачу на последовательность
простых, независимых этапов (фильтров), объединенных с
помощью каналов
8. Маршрутизатор сообщений
• Как передавать сообщения различным фильтрам, в
зависимости от условий?
• Роутер сообщений.
Специальный фильтр, который умеет извлекать сообщение из одного
канала и помещать его в другой канал.
9. Типы маршрутизаторов
• Фиксированный – один входящий и один исходящий
канал
• Маршрутизаторы на основе содержимого
• Маршрутизаторы на основе контекста
Пример, балансировка загрузки
• Динамический маршрутизатор
• Маршрутизаторы с поддержкой состояния
• Маршрутизаторы без поддержки состояния
10. Конечная точка СОС
• Как подключить приложение к системе обмена
сообщениями?
• Конечная точка – клиент СОС, позволяющий приложению
принимать и отправлять сообщения.
12. Транслятор сообщений
• Приложения используют разные форматы данных. Как
организовать взаимодействие?
• Для преобразования использовать специальный фильтр –
транслятор сообщений
13. Уровни преобразования
Уровень
Объект
Средство
Структуры данных
Сущности, ассоциации
Шаблоны структурного
преобразования
Типы данных
Имя поля, тип данных,
ограничение, значение
поля
Визуальные редакторы,
XSLT, БД
Представление данных
Кодировка, XML, JSON
Анализаторы, API
Транспортный
TCP/IP, HTTP, SOAP, JMS
Адаптер канала
15. Основные вопросы
• Фиксированный набор каналов
• Определение набора каналов
• Однонаправленные каналы
•
•
•
•
•
•
Отношения “один-к-одному” и “один-ко-многим”
Тип данных
Неверные и недоставленные сообщения
Защита от сбоев
Клиенты, не предназначенные для обмена сообщениями
Коммуникационная магистраль
16. Канал “точка-точка”
• Как гарантировать, что документ или вызов будет получен
только одним приложением?
37. Варианты запросов и ответов
• Удаленный вызов процедуры с помощью обмена
сообщениями.
– Запрос – сообщение с командой, описывающее функцию, которую
надо вызвать
– Ответ – сообщение с данными документа
• Запрос с помощью обмена сообщениями
– Сообщение, с текстом запроса
– Ответ – результирующий набор данных, отправленный в виде
цепочки сообщений
• Уведомление/подтверждение
– Запрос – сообщение о событии
– Ответ – сообщение с данными, подтверждающими получение
сообщения
43. Индикатор формата
• Как спроектировать формат сообщения, чтобы
предусмотреть возможность изменений в будущем?
Подходы:
1. Номер версии
2. Внешний ключ
3. Документ с описанием формата
50. Стратегии разрешения кофликтов
• Игнорировать управляющие сообщения, которые
конфликтуют с существующими правилами
• Отправить сообщение первому получателю с
подходящими критериями
• Отправить сообщение всем получателям с подходящими
критериями
57. Вопросы при реализации:
1. Корреляция. Какие входящие сообщения связаны друг с
другом?
2. Условия полноты. Когда агрегатор готов опубликовать
итоговое сообщение?
3. Алгоритм агрегации. Как скомпоновать полученные
сообщения в одно итоговое сообщение?
65. Карта маршрутизации
Необходимо провести сообщение через несколько этапов
обработки, при этом на момент разработки системы
последовательность этапов неизвестна и может
отличаться для каждого сообщения
Необходимо обеспечить:
• Эффективное продвижение сообщений (сообщения
должны проходить только через необходимые этапы
обработки)
• Эффективное использование ресурсов
• Гибкость (маршрут должен легко поддаваться
изменениям)
• Простота поддержки
66.
67. Область применения
1. Цепочка бинарных этапов проверки
2. Каждый этап обработки представляет собой
преобразование без сохранения состояния
3. На каждом этапе происходит сбор данных, но не
принимаются решения
68. Диспетчер процессов
• Как провести сообщение через несколько этапов
обработки, если на момент проектирования системы
требуемые этапы обработки неизвестны и необязательно
будут выполняться последовательно друг за другом?
75. Оболочка конверта
• Система обмена сообщениями существующего
приложения предъявляет особые требования к формату
сообщения
76. Процесс упаковки сообщения в
конверт
1. Исходное приложение публикует сообщение в
необработанном виде.
2. Упаковщик принимает необработанное сообщение и
преобразует его в формат, удовлетворяющий
требованиям системы обмена сообщениями.
3. Система обмена сообщениями передает упакованное
сообщение в пункт назначения
4. Доставленное сообщение попадает к распаковщику.
5. Распакованное сообщение доставляется получателю.
82. Этапы обработки
1. Прибывает сообщение с данными
2. Регистрация багажа генерирует уникальный ключ для
информации, содержащейся в сообщении.
3. Регистрация багажа извлекает данные из сообщения и
помещает данные в постоянное хранилище
4. Данные помещенные в хранилище удаляются из
сообщения. Вместо них отправляется квитанция.
5. Расширитель содержимого на основании квитанции
извлекает данные из хранилища.
83. Выбор ключа
1. В теле сообщения уже может содержаться ключ.
2. Можно использовать идентификатор самого сообщения.
3. Генерировать уникальный ключ.
87. Способы преобразования
1. Изменить формат данных, используемый внутри
приложения
2. Внедрить в приложение преобразователь обмена
сообщениями
3. Использовать внешний транслятор сообщений
88. Результаты
1. Двойное преобразование данных
2. Сложность разработка канонической модели
3. Зависимости между форматами данных
–
Индикатор формата
90. Шлюз обмена сообщениями
• Скрыть доступ к системе обмена сообщениями, скрыв его
от остальных частей приложения
91. Виды шлюзов
1. Блокирующий (синхронный) шлюз обмена сообщениями
2. Событийно управляемый (асинхронный) шлюз обмена
сообщениями
92. Вопросы реализации
1. Соединение шлюзов в цепочки для обеспечения уровней
абстракции
2. Обработка исключений системы обмена сообщениями
Преобразование исключений системы обмена сообщениями в
исключения, специфичные для предметной области
3. Генерация кода шлюзов
–
–
Web-сервисы
WCF
4. Использование шлюзов в процессе тестирования
94. Вопросы реализации
1. Упрощение кодирования
–
Дублирование кода
2. Преобразователь + транслятор для канонической модели
данных
95. Транзакционный клиент
• Как клиенту управлять транзакциями при взаимодействии
с системой обмена сообщениями?
96. • Гарантируют, что сообщение либо будет добавлено в
канал, либо не будет
• Гарантируют, что либо будет считано из канала, либо не
будет
• Транзакционный отправитель – сообщение не будет
добавлено в канал до тех пор, пока отправитель не
подтвердит выполнение транзакции
• Транзакционный получатель – сообщение не будет
удалено из канала до тех пор, пока получатель не
подтвердит выполнение транзакции.
98. Отправка-получение пары
сообщений
1. Реализация
Начать транзакцию, получить и обработать первое сообщение,
отправить второе, подтвердить выполнение транзакции
2. Результат
Первое сообщение не будет удалено из своего канала, пока второе не
будет успешно добавлено в свой канал
3. Тип транзакции
Если оба сообщения отправляются по каналам одной системы, то
транзакция простая, в противном случае - распределенная
4. !Может применяться только получателем запроса
99. Группа сообщений
1. Реализация
Начать транзакции, по очереди отправить или получить все
сообщения, после этого подтвердить выполнение транзакции.
2. Результат
При отправке ни одно из них не будет добавлено в канал до тех пор,
пока они все не буду успешно отправлены. При получении
сообщений ни одно из них не будет удалено из канала до тех пор,
пока все не будут успешно получены.
3. Тип транзакции
Простая. Часто гарантируется, что будут получены в том же порядке, в
котором были отправлены.
100. Сообщение – база данных
1. Реализация
Начать транзакцию, получить сообщение, обновить базу
данных, после этого подтвердить выполнение транзакции. Или
обновить базу, отправить сообщение, подтвердить выполнение
транзакции.
2. Результат
Сообщение не будет удалено из канала до тех пор, пока не
произойдет обновление базы данных или база данных не будет
обновлена, пока не будут разосланы соответствующие
уведомления.
3. Тип транзакции
Распределенная транзакция.
101. Сообщение – рабочий поток
1. Реализация
Начать транзакцию, открыть единицу работы, отправить сообщение с
запросом, подтвердить выполнение транзакции. Или начать
другую транзакцию, получить сообщение с ответом, закрыть или
аварийно завершить единицу работы, подтвердить выполнение
транзакции.
2. Результат
Единица работы не будет успешно закрыта, пока запрос не будет
отправлен, или ответ не будет удален из канала, пока единица
работы не будет обновлена.
3. Тип транзакции
Распределенная транзакция
106. Особенности
• Канал “точка-точка”
• Каждый из потребителей выполняется в собственном
потоке
• Скорость обработки сообщений определяется тем, как
быстро канал может распределять сообщения по
потребителям
• Конкурирующие потребители могут быть
опрашивающими, событийными или их комбинацией.
• Транзакционность может приводить к снижению
конкурирующих потребителей
108. Составные части паттерна
• Диспетчер. Потребляет сообщения из канала, а затем
раздает их.
• Исполнитель. Получает сообщение от диспетчера, а затем
обрабатывает его.
110. Компоненты
• Поставщик. Задает параметры выбора сообщения перед
отправкой.
• Параметры выбора. Одно или несколько
значений, заданных в сообщении, на основании которых
потребитель принимает решение об обработке
сообщения.
• Избирательный потребитель. Получает только те
сообщения, которые соответствуют критериям отбора.
111. Вопросы реализации
• Реализация цепочки избирательных потребителей –
каждый отбирает сообщения по своему набору признаков.
• Если избирательные потребители используются как
конкурирующие потребители, то они должны быть
спроектированы таким образом, чтобы сообщение было
обработано по крайней мере один раз.
• Если на одном канале разместить несколько
избирательных потребителей, то можно заменить канал
типа данных. Так делать нежелательно, если необходимо
скрыть часть сообщений от некоторых приложений.
114. Идемпотентный получатель
• Что делать, если сообщение было доставлено несколько
раз?
Стратегии:
• Явное удаление дубликатов сообщений
• Определение семантики сообщения с учетом
идемпотентности
Пример:
• Положить на счет 12345 еще 10 рублей.
• Установить баланс счета 12345 равный 110 рублям.
115. Активатор службы
Необходимо спроектировать службу, чтобы ее можно было
вызывать как с помощью разных технологий обмена
сообщениями, а также с помощью технологий не
связанных с обменом сообщениями.
119. Сообщения для шины
1. Конфигурационные сообщения.
Каждый компонент должен иметь набор настраиваемых параметров:
– Адреса каналов
– Форматы данных сообщений
– Тайм-ауты
– И т.д.
Также таблицы маршрутизации роутеров.
2. Пульсы.
Может включать дополнительные сведения о компоненте: число
обработанных сообщений, объем оперативной памяти и т.д.
3. Тестовые сообщения
Получить более подробную информацию о работе компонента, чем
предоставляет сообщение-пульс.
120. 4. Исключения.
Информацию об исключениях можно дублировать в шину
управления, чтобы система могла оценить степень их
серьезности.
5. Статистические сообщения
Как правило применяется канал с негарантированной доставкой или
с низким приоритетом.
6. Активная консоль
Все действия объединяются в единой центральной консоли.
123. Вопросы реализации
• На примем и публикацию сообщения уходит время.
• Исходное сообщение и сообщение-двойник могут иметь
разные идентификаторы, что усложняет обработку
ответов.
• Сообщение менять не должно.
124. Журнал доставки сообщений
Отладка маршрутов следования сообщений
Вопросы:
• При прохождении сообщения через некоторые
компоненты идентификатор сообщения может меняться
• На одно входящее сообщение может быть несколько
исходящих
• Одно сообщение может являться результатом обработки
нескольких сообщений
125. Стратегии организации журнала
• Дерево
• Простой список
• Журнал доставки “победившего” сообщения
Особенно полезен, если сообщение проходит ряд фильтров