mule esb - easy integration and prototyping for client-server applications
TRANSCRIPT
О себеКонстантин СлисенкоSenior Software Engineer в JazzTeam
www.slisenko.net
CRMДанные о клиентах
ProjectsВедение проектовРасчёт затрат
LogisticsКонтроль склада и
поставок
Database/SQL
REST/JSON
SOAP/XML
CRMДанные о клиентах
ProjectsВедение проектовРасчёт затрат
LogisticsКонтроль склада и
поставок
Database/SQL
REST/JSON
SOAP/XML
SSOДанные о пользователяхЕдиная авторизация
PLAIN HTTP
CRMДанные о клиентах
ProjectsВедение проектовРасчёт затрат
SupportФиксирование жалоб и
дефектов
LogisticsКонтроль склада и
поставок
Database/SQL
REST/JSON
XML
REST/JSON
SOAP/XML
XML
SSOДанные о пользователяхЕдиная авторизация
SOAP/XML
PLAIN HTTP
CRMДанные о клиентах
ProjectsВедение проектовРасчёт затрат
SupportФиксирование жалоб и
дефектов
LogisticsКонтроль склада и
поставок
Database/SQL
REST/JSON
SSO #1Данные о пользователяхЕдиная авторизация
IS AVAILABLE?
IS AVAILABLE?
XML
REST/JSON
SOAP/XML
XML
SSO #2Данные о пользователяхЕдиная авторизация
SOAP/XML
PLAIN HTTP
IS AVAILABLE?
Проблема Решение
Новая версия SUPPORT будет работать по другому протоколу или поменяется формат данных
Переделка систем, которые с ней работают
Поменяется алгоритм выбора SSO или добавится SSO3
Переделка логики на всех системах
Поменяется IP-адрес одной из систем Меняем конфигурацию всех систем, которые с ней работают
Нужно предоставить данные из разных систем для партнёров
1. Отдаём партнёрам много ip-адресов и интерфейсов с разными форматами данных
2. Добавляем контроль доступа всем системам
Нужно добавить логгирование: какую информацию запрашивают партнёры
Доработка всех систем
Проблемы архитектуры “точка-точка”
▷ Большое количество взаимодействий между системами○ системы должны знать друг о друге○ сложность в реконфигурации○ большие затраты на поддержку и доработку
▷ Разные протоколы и форматы○ усложнение каждой системы
▷ Дублирование интеграционной функциональности○ Контроль доступа○ Балансировка нагрузки○ Логгирование
CRMДанные о клиентах
ProjectsВедение проектовРасчёт затрат
SupportФиксирование жалоб и
дефектов
LogisticsКонтроль склада и
поставок
Database/SQL
REST/JSON
SSO #1Данные о пользователяхЕдиная авторизация
XML
SOAP/XML
SSO #2Данные о пользователяхЕдиная авторизация
PLAIN HTTP
ESBИнтеграционна шина
IS AVAILABLE?
Возможности MULE ESB
Выполнение интеграционной логикиMULE-сервер может выполнять код на java, python, groovy, … Можно писать самому или брать готовые компоненты.
Множество готовых компонентовКоннекторы, трансформеры, фильтры, условия, ветвления, вызов программного кода, обработка ошибок.
Маршрутизация сообщенийПриложения знают только о MULE, а он знает кому переслать какое сообщение.
Преобразование протоколов и форматовС помощью коннекторов и трансформеров можно изменить протокол и формат сообщений не меняя внешние системы.
Балансировка нагрузкиС помощью готовых компонентов MULE можно настроить балансировку нагрузки без необходимости переделки приложений.
Возможность подключения spring
Все конфигурационные файлы MULE построены на основе Spring Framework, поэтому легко подключается новая функциональность..
Некоторые сценарии работы ESB
▷ Маршрутизация, балансировка нагрузки, конфигурация в одном месте
▷ Конвертация форматов и протоколов, трансформация данных
▷ Выполнение интеграционной логики○ Балансировка нагрузки○ Логгирование○ Проксирование, секьюрность○ Отправка писем при определённых
условиях
AB
C
ESB
A CESB
JSON XML
ESBA
PARTNERS
C
HTTPS, SECURITY
LOGGING
XML/JSON to object
Data mapper Java code execution
Logger Split collection of items
Некоторые компоненты MULE
Простой пример
<mule>
<http:listener-config name="HTTP_Listener_Configuration" host="localhost" port="8081"/>
<flow name="basic_tutorialFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="*" />
<logger level="INFO" message="Path #[message.inboundProperties.'http.request.
path']"/>
<set-payload doc:name="Set Payload" value="#['Hello, ' + message.
inboundProperties.'http.request.path' + '. Today is ' + server.dateTime.format('dd/MM/yy')
+ '.' ]"/>
</flow>
</mule>
MULE Studio (Anypoint studio)Визуальная среда для разработки MULE-приложений, так же позволяет делать отладкуhttps://www.mulesoft.com/platform/mule-studio
Начальные данныеЕсть MySQL БД с таблицей reporters, в которой хранятся докладчики Solit
Пример 1: быстрый прототип JSON-сервиса списка докладчиков
ЗадачаНеобходимо сделать JSON web-сервис, который возвращает список докладчиков.
Реализация
<db:mysql-config name="MySQL_Configuration" host="localhost" port="3306" user="root" password="root" database="mule" doc:name="MySQL Configuration"/><flow name="JsonService" doc:name="JsonService"> <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" doc:name="HTTP /reporters" path="reporters"/> <logger message="Request to reporters #[payload]" level="INFO" doc:name="Log request"/> <db:select config-ref="MySQL_Configuration" doc:name="Select all reporters"> <db:parameterized-query><![CDATA[select name, description from reporters]]></db:parameterized-query> </db:select> <json:object-to-json-transformer doc:name="Object to JSON"/></flow>
Результат: список докладчиков
[{"description":"MBA, Тренер и коуч по бизнес-анализу, член IIBA (International Institute of\nBusiness Analysis / Международный Институт бизнес-анализа). Алла Стрэйдер, США. MBA, PMP, Тренер и коуч по бизнес-анализу и карьерному росту. Сертифицированный руководитель по про","name":"Анна Рохас"},
{"description":"Chief Software Engineer в EPAM Systems. JavaScript разработчик, опытный тренер и руководитель курсов по JavaScript/Front-end в Минском отделении компании. Один из организаторов открытых встреч JavaScript/Front-End разработчиков rollingscopes.com, а также ","name":"Дмитрий Воробей"},
{"description":"опыт в IT 12 лет, IT Consultant, CSO в компании DPI.Solutions. QA Automation активист сообщества COMAQA.BY. QA Automation Department Manager. C++ Architect, PM, Group Manager, Process Manager в ISSoft / CoherentSolutions","name":"Антон Семенченко"},
{"description":"Основатель компании ООО «Игрика» (разработка настольных игр), разработавшей несколько экономических игр и программ развития финансовой грамотности. Основатель Стартап Движения Беларуси, бывший владелец компании ООО «Стартап Технологии» (ивент-менеджмент w","name":"Константин Журавский"},
{"description":"Совладелец компании VironIT","name":"Максим Осипов"},
{"description":"Управляет проектами в wearepropeople.com. Мечтает побывать в Беларуси.","name":"Максим Рыжков"}]
http://localhost:8081/reporters
Начальные данныеЕсть URL с RSS-лентой http://solit.isoligorsk.org/feed/
Пример 2: проксировать RSS сайта конференции Solit
ЗадачаСделать прокси, который может возвращать данные и в XML и в JSON
http://localhpst:8081/solit/rss/xml
http://localhpst:8081/solit/rss/json
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"version="2.0"><channel>
<title>Первая в Беларуси Региональная IT Конференция #5</title><atom:link href="http://solit.isoligorsk.org/feed/" rel="self type="application/rss+xml"/>
<link>http://solit.isoligorsk.org</link>
<description>
город Солигорск, средняя школа #11, 14-15 марта 2015 года, начало в 10 утра</description>
Реализация<flow name="ProxyForSolitRss" doc:name="ProxyForSolitRss"> <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="solit/rss" doc:name="HTTP /solit/rss"/> <set-variable variableName="mode" value="#[message.inboundProperties['http.relative.path']]" doc:name="Check mode"/> <http:outbound-endpoint exchange-pattern="request-response" method="GET" address="http://solit.isoligorsk.org/feed/" mimeType="text/xml" doc:name="HTTP to solit.isoligorsk.com"/> <choice doc:name="Choice"> <when expression="#[flowVars.mode == 'json']"> <json:xml-to-json-transformer doc:name="XML to JSON"/> </when> <when expression="#[flowVars.mode == 'xml']"> <echo-component doc:name="Echo XML as is"/> </when> <otherwise> <set-payload value="<error>Please specify format: "http://localhost:8081/solit/rss/{xml or json}"</error>" doc:name="Write "Please specify format""/> </otherwise> </choice></flow>
Результат: RSS в XML-формате
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel>
<title>Первая в Беларуси Региональная IT Конференция #5</title><atom:link href="http://solit.isoligorsk.org/feed/" rel="self" type="application/rss+xml" /><link>http://solit.isoligorsk.org</link><description>город Солигорск, средняя школа #11, 14-15 марта 2015 года, начало в 10 утра</description><lastBuildDate>Sat, 07 Mar 2015 14:30:37 +0000</lastBuildDate><language>en-US</language><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><generator>http://wordpress.org/?v=327</generator><item>
<title>Вебинар по бизнес-анализу из США</title><link>http://solit.isoligorsk.org/2015/03/06/вебинар-по-бизнес-анализу-из-сша</link><comments>http://solit.isoligorsk.org/2015/03/06/вебинар-по-бизнес-анализу-из-
сша/#comments</comments><pubDate>Fri, 06 Mar 2015 15:08:04 +0000</pubDate><dc:creator><![CDATA[admin]]></dc:creator>
<category><![CDATA[Новости]]></category><guid isPermaLink="false">http://solit.isoligorsk.org/?p=2983</guid><description><![CDATA[Всех бизнес-аналитиков, системных аналитиков, технических писателей, а также
тех, кто хочет ими стать, просим обратить внимание на вебинар: “Карьера бизнес-аналитика: старт и карьерный рост”, который будут вести Анна Рохас, тренер и коуч по бизнес-анализу, член IIBA (International Institute of Business Analysis/Международный Институт бизнес-анализа) и Алла Стрэйдер, тренер и коуч ...
http://localhost:8081/solit/rss/xml
Результат: RSS в JSON-формате
{ "rss" : { "@xmlns:content" : "http://purl.org/rss/1.0/modules/content/", "@xmlns:wfw" : "http://wellformedweb.org/CommentAPI/", "@xmlns:dc" : "http://purl.org/dc/elements/1.1/", "@xmlns:atom" : "http://www.w3.org/2005/Atom", "@xmlns:sy" : "http://purl.org/rss/1.0/modules/syndication/", "@xmlns:slash" : "http://purl.org/rss/1.0/modules/slash/", "@version" : "2.0",
"channel" : { "title" : "Первая в Беларуси Региональная IT Конференция #5","atom:link" : {"@href" : "http://solit.isoligorsk.org/feed/", "@rel" : "self", "@type" :
"application/rss+xml"},"link" : "http://solit.isoligorsk.org","description" : "город Солигорск, средняя школа #11, 14-15 марта 2015 года, начало в 10 утра","lastBuildDate" : "Sat, 07 Mar 2015 14:30:37 +0000", "language" : "en-US","sy:updatePeriod" : "hourly", “sy:updateFrequency" : "1", "generator" : "http://wordpress.org/?
v=227","item" : [ { "title" : "Вебинар по бизнес-анализу из США", "link" : "http://solit.isoligorsk.
org/2015/03/06/вебинар-по-бизнес-анализу-из-сша","comments" : "http://solit.isoligorsk.org/2015/03/06/вебинар-по-бизнес-анализу-из-США/#comments","pubDate" : "Fri, 06 Mar 2015 15:08:04 +0000", "dc:creator" : "admin", "category" : "Новости","guid" : { "@isPermaLink" : "false", "$" : "http://solit.isoligorsk.org/?p=2983"},"description" : "Всех бизнес-аналитиков, системных аналитиков, технических писателей, а также тех, кто
хочет ими стать, просим обратить внимание на вебинар: “Карьера бизнес-аналитика: старт и карьерный рост”, который будут вести Анна Рохас, тренер и коуч по бизнес-анализу, член IIBA (International Institute of Business Analysis/Международный Институт бизнес-анализа) и Алла Стрэйдер, тренер и коуч по бизнес-анализу и карьерному росту, сертифицированный […]", ...
http://localhost:8081/solit/rss/json
Результат: неверный ввод
<error>Please specify format: "http://localhost:8081/solit/rss/{xml or json}"
</error>
http://localhost:8081/solit/rss/aaaaa
Мой опыт использования MULE1. Нужно время на погружение
a. простые примеры делаются быстро, готовых примеров в интернете и литературе не хватает
2. В бесплатной community-версии ограниченный набор компонентов
a. была задача работы с Oracle, пришлось писать для этого код на Java и встраивать в MULE-flow
3. Anypoint Studio зачастую не хочет подхватывать сложные XML-конфиги
a. Студия очень удобна для проектирования и отладки, но если писать сложный конфиг на XML, то она не всегда его может подхватывать
4. Подключение спринга - большой плюсa. можно легко переносить в MULE куски готовых приложений
5. Новые версии MULE зачастую очень плохо совместимы со старыми конфигами
a. Приходится переписывать приложения
Credits
Special thanks to all the people who made and released these awesome resources for free:
▷ Minicons by Webalys▷ Presentation template by SlidesCarnival▷ Photographs by Unsplash