enterprise serial bus on intersystems ensemble
TRANSCRIPT
![Page 2: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/2.jpg)
План
• Введение • Общие задачи интеграционной шины. Сервисы ФЭР2.
• Синхронное взаимодействие • Простое приложение Ensemble. Маршрутизация
сообщений на основе бизнес-правил. Трансформация данных.
• Асинхронное взаимодействие • Бизнес-процесс на BPL. Применение WS-Addressing.
Возможности Ensemble: надежная доставка сообщений.
![Page 3: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/3.jpg)
Интеграционная шина
• Задачи шины: • Совместимость • Маршрутизация • Трансформация и
нормализация • Надежная доставка • Безопасность • Протоколирование
![Page 4: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/4.jpg)
Сервисы ФЭР
• ФЭР = Федеральная Электронная Регистратура • Централизованное ведение расписаний приема врачей
• Записаться на прием к врачу можно через gosuslugi.ru • Веб-сервисы ФЭР используют SSL и SOAP 1.2 • Все запросы к сервисам на промышленном сервере
ФЭР должны быть подписаны ЭЦП (УЦ Минздрава)
• Описание сервисов ФЭР – http://egisz.rosminzdrav.ru • Документы > ЭР > Новые документы ФЭР > Описание
интеграционных профилей 2.13.docx
![Page 5: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/5.jpg)
Тестовый сервис ФЭР
• Адрес SOAP-сервиса ФЭР: • http://api-er2.rosminzdrav.ru/mis
• Несколько десятков «методов» • См. раздел 3 документа Описание интеграционных профилей 2.13.docx
• Метод GetMos – поиск медицинских организаций (МО) • Принимает на вход набор критериев поиска МО, а также
«токен авторизации внешней системы» • Выдает список поликлиник/больниц
![Page 6: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/6.jpg)
GetMos: запрос
![Page 7: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/7.jpg)
Вызов сервиса ФЭР из Caché
• В терминале инициируем вызов сервиса ФЭР, используя системный класс %SOAP.WebRequest:
• do ##class(meetup25.test.TestCaller).test()
![Page 8: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/8.jpg)
GetMos: ответ
![Page 9: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/9.jpg)
Ensemble
• Использование инфраструктуры Ensemble для решения интеграционных задач • Бизнес-службы, бизнес-процессы, бизнес-операции • Возможность настроить отдельную очередь сообщений
для каждого бизнес-процесса/операции • Очередь обладает пулом джобов (процессов ОС),
занимающихся обработкой сообщений
![Page 10: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/10.jpg)
Вызов сервиса ФЭР из Ensemble
• Запускаем приложение Ensemble • В классе meetup25.test.TestCaller укажем адрес веб-
сервиса Ensemble • Инициируем вызов веб-сервиса Ensemble в терминале
• do ##class(meetup25.test.TestCaller).test()
![Page 11: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/11.jpg)
Задачи шины
• Задачи шины: • Совместимость • Маршрутизация • Трансформация и
нормализация • Надежная доставка • Безопасность • Протоколирование
![Page 12: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/12.jpg)
Задачи шины
• Задачи шины: • Совместимость • Маршрутизация • Трансформация и
нормализация • Надежная доставка • Безопасность • Протоколирование
![Page 13: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/13.jpg)
Маршрутизация сообщений
• Нацелим бизнес-службу на процесс «Маршрутизатор», который маршрутизирует сообщения согласно бизнес-правилу
• Бизнес-правило анализирует SOAP Action сообщения, поэтому в классе meetup25.test.TestCaller укажем значение SOAP Action равное «GetMos»
• Инициируем вызов веб-сервиса Ensemble в терминале • do ##class(meetup25.test.TestCaller).test()
![Page 14: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/14.jpg)
Задачи шины
• Задачи шины: • Совместимость • Маршрутизация • Трансформация и
нормализация • Надежная доставка • Безопасность • Протоколирование
![Page 15: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/15.jpg)
Трансформация запроса
• Цель: • Использовать в клиентской системе более простой и
понятный формат XML-сообщений, перенеся в Шину специфическую логику оформления запроса для ФЭР
• Этапы трансформации: • 1) Base64-кодирование исходного XML-сообщения • 2) Добавление «оберточных» XML-элементов согласно
спецификации SOAP-сервиса ФЭР
![Page 16: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/16.jpg)
GetMos: запрос
![Page 17: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/17.jpg)
Трансформация запроса
• Этапы трансформации: • Base64-кодирование исходного XML-сообщения • Добавление «оберточных» XML-элементов
• Применяемый шаблон XSLT будем хранить в настройке продукции
• Добавляем трансформацию meetup25.FerRequestDTL в бизнес-правило
• В классе meetup25.test.TestCaller сменим запрос на
![Page 18: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/18.jpg)
Трансформация запроса
• В терминале выполним: do ##class(meetup25.test.TestCaller).test()
![Page 19: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/19.jpg)
Синхронное взаимодействие
• Недостатки синхронного обмена
• В случае сбоя в сети или сбоя ФЭР клиенту потребуется повторно инициировать запрос
• Если ответ от ФЭР не укладывается в тайм-аут клиента, то ошибка
![Page 20: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/20.jpg)
Асинхронное взаимодействие
![Page 21: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/21.jpg)
Асинхронный процесс
![Page 22: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/22.jpg)
Асинхронное взаимодействие
• Изменение правил маршрутизации: • Переключим цель действия send на Асинхронный
процесс • Изменения в классе meetup25.test.TestCaller:
• ONEWAY = 1 (не ожидаем синхронный ответ) • Добавим формирование заголовков WS-Addressing
• В качестве имитации callback-сервиса на стороне системы-клиента используется класс-заглушка
• do ##class(meetup25.test.TestCaller).test()
![Page 23: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/24.jpg)
Обработка транспортных ошибок
• Настройки бизнес-операции Вызов сервиса ФЭР: • Действия для кода ответа: E=RS • Интервал повторов: 5 (секунд) • Тайм-аут отказа: 15 (секунд) - в реальной системе
может быть несколько суток
• В случае сбоя сети или ошибки сервера ФЭР будут осуществляться повторные попытки вызова сервиса с интервалом 5 секунд в течение 15 секунд. В случае неудачи запрос будет помечен как «отложенный».
• Ensemble >> Просмотр >> Отложенные сообщения
![Page 25: Enterprise Serial Bus on InterSystems Ensemble](https://reader034.vdocuments.net/reader034/viewer/2022042518/55a9b2621a28ab384f8b4640/html5/thumbnails/25.jpg)
Спасибо за внимание!