Хороший вопрос - принципиальное различие между служебной шиной и системой обмена сообщениями заключается в соглашении о данных в вашей системе обмена сообщениями. Система обмена сообщениями обычно позволяет вам отправлять все: двоичные двоичные объекты, XML, списки через запятую и т. Д. Таким образом, приложение A может отправлять разделенную запятыми строку в приложение B, а B отправляет некоторый XML-файл в приложение C, а C отправляет другой XML-файл в приложение. D.
Это обмен сообщениями, но не служебная шина. Можно сказать, что система обмена сообщениями «нетипизирована» (динамическая структура), а ESB «типизирована» (статическая структура).
В «служебной шине» у вас есть общее определение данных для всех приложений и адаптеров на этой шине (может быть XML с общим XSD). Общие объекты данных (CDO). Все, что соединяется, ДОЛЖНО отправлять информацию, соответствующую этому определению данных. ESB должен поддерживать загрузку, совместное использование и управление версиями этого общего определения данных. Большим преимуществом является то, что вы можете подключить компонент (например, Message Broker), и он делает это без необходимости знать, в какое приложение отправлены эти данные и куда эти данные собираются.
Компромисс между сообщениями и ESB похож на другие нетипизированные / типизированные варианты: REST против SOAP, непроверенный XML против XML с XSD, Groovy против Java, ...
Некоторые люди получат удовольствие от дополнительной структуры (хорошо выглядит на бумаге - менеджерам это нравится) - некоторые возненавидят ее (вещи ломаются, когда меняются версии, для небольшого добавления нужно обновить все - хакерам это не очень нравится ;-)
Возвращаясь к вашим вопросам (переупорядочено)
Message Oriented Middleware (MOM): библиотеки программного обеспечения для различных языков с брокером (или нет) для обмена «сообщениями» между приложениями. На шаг впереди от связи TCP / IP. «Сообщения» - это структурированные объекты или текстовые строки или двоичные данные. Обычно у вас есть дополнительная надежность по TCP / IP или UDP. Некоторые примеры: TIBCO RV и EMS, IBM MQ, Apache ActiveMQ, ZeroMQ, ...
Java Messaging Service (JMS): определение общего API для MOM - люди жаловались, что когда ваше приложение переключается с MOM 'X' на MOM 'Y', вам нужно переписать код сообщения. Если вы кодируете против JMS, вы можете просто переключать библиотеки, и то же приложение, которое использовалось для работы с TIBCO EMS, неожиданно работает с ActiveMQ (или наоборот)
Корпоративная система обмена сообщениями (EMS): внедрение JMS компанией TIBCO (название продукта: TIBCO EMS)
Enterprise Service Bus (ESB): ESB использует промежуточное ПО, ориентированное на сообщения, для интеграции приложений, баз данных, брокеров и т. Д. ESB - это MOM с дополнительной структурой данных и управлением определением структуры. При подключении нового компонента к ESB вы можете ожидать большей «совместимости» из коробки, чем при подключении его к MOM. В ESB существуют более высокие стандарты в отношении того, что компонент должен делать для подключения. Я думаю, что ESB TIBCO называется ActiveMatrix.