mule esb - easy integration and prototyping for client-server applications

37
Быстрая интеграция и прототипирование клиент-серверных приложений с помощью MULE ESB

Upload: kslisenko

Post on 20-Jul-2015

151 views

Category:

Software


2 download

TRANSCRIPT

Быстрая интеграция и прототипирование клиент-серверных приложений с помощью MULE ESB

О себеКонстантин СлисенкоSenior Software Engineer в JazzTeam

[email protected]

www.slisenko.net

1.Проблемы интеграции

приложенийПример информационных систем в строительной

организации

CRMДанные о клиентах

CRMДанные о клиентах

ProjectsВедение проектовРасчёт затрат

REST/JSON

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. Добавляем контроль доступа всем системам

Нужно добавить логгирование: какую информацию запрашивают партнёры

Доработка всех систем

Проблемы архитектуры “точка-точка”

▷ Большое количество взаимодействий между системами○ системы должны знать друг о друге○ сложность в реконфигурации○ большие затраты на поддержку и доработку

▷ Разные протоколы и форматы○ усложнение каждой системы

▷ Дублирование интеграционной функциональности○ Контроль доступа○ Балансировка нагрузки○ Логгирование

Что такое ESB?

Data source #1

External appApp 1

App 2

Data source #2

App 3

Middleware (ESB)

CRMДанные о клиентах

ProjectsВедение проектовРасчёт затрат

SupportФиксирование жалоб и

дефектов

LogisticsКонтроль склада и

поставок

Database/SQL

REST/JSON

SSO #1Данные о пользователяхЕдиная авторизация

XML

SOAP/XML

SSO #2Данные о пользователяхЕдиная авторизация

PLAIN HTTP

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

IS AVAILABLE?

2.Mule ESB

Возможности 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

3.Примеры использования

MULEhttps://github.com/kslisenko/mule-examples

Начальные данныеЕсть 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="&lt;error&gt;Please specify format: &quot;http://localhost:8081/solit/rss/{xml or json}&quot;&lt;/error&gt;" doc:name="Write &quot;Please specify format&quot;"/> </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/Международный Институт бизнес-анализа) и Алла Стрэйдер, тренер и коуч по бизнес-анализу и карьерному росту, сертифицированный [&#8230;]", ...

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. Приходится переписывать приложения

Спасибо за внимание!Вопросы?

Константин Слисенко

[email protected]

www.slisenko.net

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