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

Enterprise Serial Bus on InterSystems Ensemble

Jul 18, 2015

Download

Software

Evgeny Shvarov
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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

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