По сути, это концептуальный способ разработки системы - компании-разработчики программного обеспечения пытаются продать вам больше, наклеивая на нее наклейку «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 аналогичны другим нетипизированным / типизированным вариантам:
- ОТДЫХ против мыла
- непроверенный XML против XML, проверенного с помощью XSD
- Groovy против Java
- интерпретируемый язык против компилируемого языка
Для небольших проектов хорошо быстро хэшировать функциональность (например, код Groovy), но для более крупных проектов хорошо иметь отладчик (например, Java), чтобы быть предупрежденным заранее, когда что-то сломается, и иметь стандарт для людей, прежде чем они примут проект.
Так что, если ваш проект страдает от того, что слишком много людей ломают систему, регистрируя непроверенные изменения - переходите к большей структуре (ESB вместо MOM). Если ваши проекты страдают от того, что не выполняется достаточное количество задач вовремя - выберите более простое, нетипизированное решение. Если и то, и другое - найди консультанта (шучу ;-)