25
Интеграционная шина на базе Ensemble Дмитрий Засыпкин [email protected] Приемы реализации

Enterprise Serial Bus on InterSystems Ensemble

Embed Size (px)

Citation preview

Page 1: Enterprise Serial Bus on InterSystems Ensemble

Интеграционная шина на базе Ensemble

Дмитрий Засыпкин [email protected]

Приемы реализации

Page 2: Enterprise Serial Bus on InterSystems Ensemble

План

• Введение • Общие задачи интеграционной шины. Сервисы ФЭР2.

• Синхронное взаимодействие • Простое приложение Ensemble. Маршрутизация

сообщений на основе бизнес-правил. Трансформация данных.

• Асинхронное взаимодействие • Бизнес-процесс на BPL. Применение WS-Addressing.

Возможности Ensemble: надежная доставка сообщений.

Page 3: Enterprise Serial Bus on InterSystems Ensemble

Интеграционная шина

• Задачи шины: • Совместимость • Маршрутизация • Трансформация и

нормализация • Надежная доставка • Безопасность • Протоколирование

Page 4: Enterprise Serial Bus on InterSystems Ensemble

Сервисы ФЭР

• ФЭР = Федеральная Электронная Регистратура • Централизованное ведение расписаний приема врачей

• Записаться на прием к врачу можно через gosuslugi.ru • Веб-сервисы ФЭР используют SSL и SOAP 1.2 • Все запросы к сервисам на промышленном сервере

ФЭР должны быть подписаны ЭЦП (УЦ Минздрава)

• Описание сервисов ФЭР – http://egisz.rosminzdrav.ru • Документы > ЭР > Новые документы ФЭР > Описание

интеграционных профилей 2.13.docx

Page 5: Enterprise Serial Bus on InterSystems Ensemble

Тестовый сервис ФЭР

• Адрес SOAP-сервиса ФЭР: • http://api-er2.rosminzdrav.ru/mis

• Несколько десятков «методов» • См. раздел 3 документа Описание интеграционных профилей 2.13.docx

• Метод GetMos – поиск медицинских организаций (МО) • Принимает на вход набор критериев поиска МО, а также

«токен авторизации внешней системы» • Выдает список поликлиник/больниц

Page 6: Enterprise Serial Bus on InterSystems Ensemble

GetMos: запрос

Page 7: Enterprise Serial Bus on InterSystems Ensemble

Вызов сервиса ФЭР из Caché

• В терминале инициируем вызов сервиса ФЭР, используя системный класс %SOAP.WebRequest:

• do ##class(meetup25.test.TestCaller).test()

Page 8: Enterprise Serial Bus on InterSystems Ensemble

GetMos: ответ

Page 9: Enterprise Serial Bus on InterSystems Ensemble

Ensemble

• Использование инфраструктуры Ensemble для решения интеграционных задач • Бизнес-службы, бизнес-процессы, бизнес-операции • Возможность настроить отдельную очередь сообщений

для каждого бизнес-процесса/операции • Очередь обладает пулом джобов (процессов ОС),

занимающихся обработкой сообщений

Page 10: Enterprise Serial Bus on InterSystems Ensemble

Вызов сервиса ФЭР из Ensemble

• Запускаем приложение Ensemble • В классе meetup25.test.TestCaller укажем адрес веб-

сервиса Ensemble • Инициируем вызов веб-сервиса Ensemble в терминале

• do ##class(meetup25.test.TestCaller).test()

Page 11: Enterprise Serial Bus on InterSystems Ensemble

Задачи шины

• Задачи шины: • Совместимость • Маршрутизация • Трансформация и

нормализация • Надежная доставка • Безопасность • Протоколирование

Page 12: Enterprise Serial Bus on InterSystems Ensemble

Задачи шины

• Задачи шины: • Совместимость • Маршрутизация • Трансформация и

нормализация • Надежная доставка • Безопасность • Протоколирование

Page 13: Enterprise Serial Bus on InterSystems Ensemble

Маршрутизация сообщений

• Нацелим бизнес-службу на процесс «Маршрутизатор», который маршрутизирует сообщения согласно бизнес-правилу

• Бизнес-правило анализирует SOAP Action сообщения, поэтому в классе meetup25.test.TestCaller укажем значение SOAP Action равное «GetMos»

• Инициируем вызов веб-сервиса Ensemble в терминале • do ##class(meetup25.test.TestCaller).test()

Page 14: Enterprise Serial Bus on InterSystems Ensemble

Задачи шины

• Задачи шины: • Совместимость • Маршрутизация • Трансформация и

нормализация • Надежная доставка • Безопасность • Протоколирование

Page 15: Enterprise Serial Bus on InterSystems Ensemble

Трансформация запроса

• Цель: • Использовать в клиентской системе более простой и

понятный формат XML-сообщений, перенеся в Шину специфическую логику оформления запроса для ФЭР

• Этапы трансформации: • 1) Base64-кодирование исходного XML-сообщения • 2) Добавление «оберточных» XML-элементов согласно

спецификации SOAP-сервиса ФЭР

Page 16: Enterprise Serial Bus on InterSystems Ensemble

GetMos: запрос

Page 17: Enterprise Serial Bus on InterSystems Ensemble

Трансформация запроса

• Этапы трансформации: • Base64-кодирование исходного XML-сообщения • Добавление «оберточных» XML-элементов

• Применяемый шаблон XSLT будем хранить в настройке продукции

• Добавляем трансформацию meetup25.FerRequestDTL в бизнес-правило

• В классе meetup25.test.TestCaller сменим запрос на

Page 18: Enterprise Serial Bus on InterSystems Ensemble

Трансформация запроса

• В терминале выполним: do ##class(meetup25.test.TestCaller).test()

Page 19: Enterprise Serial Bus on InterSystems Ensemble

Синхронное взаимодействие

• Недостатки синхронного обмена

• В случае сбоя в сети или сбоя ФЭР клиенту потребуется повторно инициировать запрос

• Если ответ от ФЭР не укладывается в тайм-аут клиента, то ошибка

Page 20: Enterprise Serial Bus on InterSystems Ensemble

Асинхронное взаимодействие

Page 21: Enterprise Serial Bus on InterSystems Ensemble

Асинхронный процесс

Page 22: Enterprise Serial Bus on InterSystems Ensemble

Асинхронное взаимодействие

• Изменение правил маршрутизации: • Переключим цель действия send на Асинхронный

процесс • Изменения в классе meetup25.test.TestCaller:

• ONEWAY = 1 (не ожидаем синхронный ответ) • Добавим формирование заголовков WS-Addressing

• В качестве имитации callback-сервиса на стороне системы-клиента используется класс-заглушка

• do ##class(meetup25.test.TestCaller).test()

Page 23: Enterprise Serial Bus on InterSystems Ensemble

WS-Addressing

• http://www.w3.org/TR/ws-addr-core/ • WS-Addressing описывает стандартный способ

включения информации о маршрутизации в заголовки SOAP-сообщений <env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'> <env:Header xmlns:wsa='http://www.w3.org/2005/08/addressing'> <wsa:MessageID>urn:uuid:305EE1B2-EEF8-4095…</wsa:MessageID> <wsa:ReplyTo>http://server/callback-service…</wsa:ReplyTo> <wsa:RelatesTo>urn:uuid:7854E197-F7CF-491B…</wsa:RelatesTo> </env:Header> <env:Body> ... </env:Body> </env:Envelope>

Page 24: Enterprise Serial Bus on InterSystems Ensemble

Обработка транспортных ошибок

• Настройки бизнес-операции Вызов сервиса ФЭР: • Действия для кода ответа: E=RS • Интервал повторов: 5 (секунд) • Тайм-аут отказа: 15 (секунд) - в реальной системе

может быть несколько суток

• В случае сбоя сети или ошибки сервера ФЭР будут осуществляться повторные попытки вызова сервиса с интервалом 5 секунд в течение 15 секунд. В случае неудачи запрос будет помечен как «отложенный».

• Ensemble >> Просмотр >> Отложенные сообщения

Page 25: Enterprise Serial Bus on InterSystems Ensemble

Спасибо за внимание!