Это в основном концептуальный способ проектирования системы - компании-разработчики пытаются продать вам больше, наклеив на нее наклейку с надписью «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" цена = 101,4
vol = 100}) - обратите внимание, что пункт назначения вводится из ESB
В первый раз это, вероятно, немного больно, но я думаю, вы можете привыкнуть к этому, так же, как вы можете привыкнуть к EJB; -)
Можно сказать, что система MOM является «нетипизированной» (динамическая структура), а ESB «типизированной» (статическая структура). Компромиссы необработанных сообщений и ESB аналогичны другим нетипизированным / типизированным вариантам:
- REST vs. SOAP
- неподтвержденный XML и XML, проверенный с помощью XSD
- Groovy vs. Java
- интерпретируемый язык против скомпилированного языка
Для небольших проектов приятно быстро хэшировать функциональность (например, Groovy-код), но для больших проектов хорошо иметь отладчик (например, Java), который должен быть заранее предупрежден, когда что-то сломается, и иметь стандарт для людей до они передают проект.
Так что, если ваш проект страдает от слишком большого количества людей, нарушающих систему путем проверки непроверенных изменений - переходите к большей структуре (ESB вместо MOM).
Если ваши проекты страдают от того, что не успели вовремя сделать достаточно - выберите более простое нетипизированное решение.
Если и то и другое - найди консультанта (шучу; -)