Разница между Message Broker и ESB состоит в основном из слова «шина».
Для меня Message Broker - это один (обычно большой) процесс, который преобразует данные из одной структуры в другую или изменяет содержимое.
ESB - это промежуточное программное обеспечение, ориентированное на сообщения (MOM), плюс дополнительные сервисы, одна из которых может быть брокером сообщений. Таким образом, ESB может включать Message Broker в качестве одного из своих компонентов. Шина состоит из более чем одного процесса, иначе я бы не назвал это «шиной». Природа шины заключается в том, что существует несколько компонентов, выполняющих разные задачи, каждый из которых взаимодействует через MOM и придерживается той или иной формы «общего формата данных». Шина будет состоять из: приложений, отправляющих данные в MOM, адаптеров баз данных, Message Brokers, мостов MOM и т. Д.
Разделение немного постепенное, но самое большое различие между архитектурой Message Broker и шиной заключается в зернистости . Если ваша задача - объединить приложения A, B, .., Z и пару баз данных, вы можете сделать это с помощью одного большого Message Broker, соединяющего всех и каждого. Или с ESB, где несколько небольших компонентов выполняют только небольшие задачи. Например, один адаптер подключается к A, другой к B (но они не выполняют преобразование), затем каждый отправляет свои данные одному (или нескольким) Message Broker, каждый из которых должен быть максимально простым - например. не нужно знать о модели данных «А» или «В». Хороший ESB должен иметь общее определение данных на шине, абстрагируясь от «различий» отдельных приложений.
ТРАНСФОРМАЦИЯ: ESB не помогает с преобразованием, если он не поставляется с Message Broker. Но каждый хороший ESB в любом случае должен включать Message Broker.
Посредник сообщений должен быть экспертом вашего автобуса для преобразований, но не более того.
ГОРИЗОНТАЛЬНОЕ масштабирование: если вам нужно подключить только 3 вещи (сейчас и навсегда), вероятно, не стоит усилий, чтобы получить полноценный ESB. Message Broker имеет преимущество в том, что он представляет собой один большой процесс. Вы можете настроить там все и иметь централизованное расположение для всех ваших отображений данных, фильтрации и маршрутизации.
Но если у вас есть 30 приложений для подключения, один Message Broker, вероятно, остановится. Конечно, вы можете покупать больше экземпляров, запускать избыточные вещи и т. Д., Но вы должны изменить свою стратегию, чтобы «локализовать» рабочие места. Адаптер каждого приложения (может быть один маленький экземпляр Message Broker каждый) должен иметь возможность генерировать и / или получать обобщенную общую модель данных (например, XML с общим XSD). Также может быть центральный Message Broker для задач преобразования, но этот экземпляр не должен знать о модели данных A или B. Поэтому ESB должен перенести обработку на экспертный компонент, а не хранить все в центральном месте.