В основному це концептуальний спосіб розробити систему - компанії-виробники програмного забезпечення намагаються продати вам більше, наклеюючи на них наклейку "ESB", і менеджерам подобається, тому що ESB добре виглядає з "вищого рівня".
ESB - це в основному MOM (орієнтоване на повідомлення проміжне програмне забезпечення) з доданою моделлю даних та управлінням визначенням структури. У вас є загальне визначення даних для всіх програм та адаптерів на цій шині (може бути XML із загальним XSD). Все, що пов’язує, ПОВИННО надсилати інформацію, яка відповідає цьому визначенню даних. ESB підтримує завантаження, обмін та встановлення версій цього загального визначення даних. При підключенні нового компонента до ESB ви можете очікувати більшої `` сумісності '', ніж при підключенні його до MOM. Кожен компонент на цій шині концептуально трактується як "ресурс" - отже, існує додаткова абстракція, яка відокремлює від'єднувача відправника від одержувача.
Приклад: припустимо, ви хочете зв’язати програму A із програмою B у стандартному проміжному програмному забезпеченні, орієнтованому на повідомлення, візьмемо JMS. Ви розмовляєте зі своїми колегами, які працюють над додатком B, узгоджуєте тему, тип повідомлення та поля та надсилаєте його (псевдокод): sendJms ("TRADE.MSFT", {MapMessage trader = "pete" price = 101.4 vol = 100})
Якщо ви робите те саме в архітектурі, орієнтованій на сервіс, вам потрібно
- встановити додаткове програмне забезпечення
- вивчити багато нових понять
- визначте свій новий компонент Java в адміністративному інтерфейсі ESB
- реалізувати деякі інтерфейси, які контролюються ESB
- sendJms (getDestination (), {MapMessage trader = "pete" price = 101.4 vol = 100}) - зверніть увагу, що пункт призначення вводиться з ESB
Перший раз це, мабуть, трохи боляче, але я думаю, ви можете звикнути до цього, як і до EJB ;-)
Можна сказати, що система MOM є "нетипізованою" (динамічна структура), тоді як ESB "набирається" (статична структура). Компроміси необроблених повідомлень порівняно з ESB подібні до інших нетипізованих / типових варіантів:
- REST проти SOAP
- неперевірений XML проти XML, перевірений XSD
- Groovy проти Java
- інтерпретована мова проти компільованої мови
Для менших проектів приємно швидко хешувати функціональність (наприклад, код Groovy), але для великих проектів добре мати налагоджувач (наприклад, Java), заздалегідь попереджати про ситуацію, коли речі ламаються, і мати стандарт для людей, перш ніж вони зобов'язуються до проекту.
Отже, якщо ваш проект страждає від того, що занадто багато людей ламають систему, перевіряючи неправомірні зміни - рухайтесь до більшої структури (ESB замість MOM). Якщо ваші проекти страждають від того, що вчасно не виконано достатньо речей - виберіть більш просте, нетипізоване рішення. Якщо це обидва - зверніться до консультанта (жартую ;-)