Как JMS соотносится со служебными шинами

#java #architecture #jms #activemq #apache-camel

#java — язык #архитектура #jms #activemq #apache-camel

Вопрос:

Я пытаюсь разобраться в JMS и прочитал несколько очень полезных источников и примеров. Сейчас я пытаюсь увидеть здесь «общую картину» и перенести всю теорию, лежащую в основе JMS, в практический контекст, где используются реальные корпоративные технологии.

введите описание изображения здесь

Итак, здесь у нас есть четыре элемента: (1) JMS — Java API для MOM, (2) ActiveMQ — одна из многих реализаций JMS, (3) EIP — интригующий и таинственный зверь, которого я только начинаю понимать, и, наконец, (4) Apache Camel, реализация этого зверя с открытым исходным кодом.

Сейчас я пытаюсь связать эти компоненты вместе, чтобы увидеть JMS (и, в целом, обмен сообщениями корпоративного класса) в действии.

Я думаю, первое, что я ищу, это простое и сжатое определение того, что такое EIP. Кажется, что это целый набор шаблонов проектирования для того, как должны вести себя MOMs, но поскольку я уже нечетко представляю концепцию обмена сообщениями для начала, это просто более размытое определение, добавляемое поверх и без того нечеткого понимания некоторых довольно сложных концепций.

Даже если я не «понимаю», что такое EIP, я «понимаю», что такие фреймворки, как Camel, Mule и ServiceMix, реализуют их и позволяют серверным компонентам («конечным точкам») эффективно обмениваться сообщениями друг с другом.

Наиболее важным в этом вопросе является мое понимание того, как эти четыре компонента соотносятся друг с другом. Я думаю, понимание этого поможет мне соединить большинство точек; ну, во всяком случае, важные.

Итак, на диаграмме выше я обозначил все 6 возможных взаимосвязей и ссылаюсь на них ниже:

  1. JMS: ActiveMQ — Я понимаю, что ActiveMQ является реализацией JMS, так же как Hibernate является реализацией JPA. Правильно ли это?
  2. ActiveMQ: Camel — У Camel есть возможность отправлять сообщения в любую реализацию JMS, такую как ActiveMQ. В этом случае ActiveMQ является конечной точкой camel. Правильно?
  3. EIP:Camel — Camel является реализацией EIPs. Понимание того, что такое EIP, в первую очередь, также важно для моего понимания всей этой настройки.
  4. EIP: JMS — Хотя между этими двумя может и не быть прямой связи, создается впечатление, что обмен сообщениями лежит в основе EIP, а JMS — это основа Java для обмена сообщениями. Справедлива ли это оценка?
  5. Я оставил отношения между EIP: ActiveMQ и JMS: Camel на случай, если между этими системами существуют какие-либо «большие концепции», о которых я должен знать.

Мы высоко ценим любую помощь в создании простого для понимания определения EIP и в понимании того, как все эти компоненты соотносятся друг с другом. Заранее спасибо!

Ответ №1:

  1. ActiveMQ — это реализация MOM. Он предоставляет клиентскую реализацию JMS API для использования языками JVM. JMS — это всего лишь API, но реализации привязаны к любому брокеру, с которым они взаимодействуют, с помощью проводного формата, поэтому вы не можете использовать реализацию ActiveMQ JMS для взаимодействия, например, с WebsphereMQ. Существуют другие API для взаимодействия с ActiveMQ с других языковых платформ — C / C через CMS, .Net через NMS. Вы также можете взаимодействовать с ActiveMQ с помощью других «не похожих на JMS» механизмов, таких как через протокол STOMP, который имеет клиентские библиотеки на Ruby, Javascript и других.
  2. ДА.
  3. Да и нет. Camel использует тот же «язык», что и EIPs, поэтому, используя Camel, вы естественным образом улавливаете EIPs. Сказав это, знание их позволяет вам понять, что вы ищете в API. Я рекомендую Camel в действии, чтобы получить хорошее представление о двух и обратиться к сайту EIP (http://www.eaipatterns.com /) когда вы хотите получить немного больше информации.
  4. Снова да и нет. Существует ряд шаблонов, реализованных с помощью обмена сообщениями (JMS — это только один вариант), но существует большое количество шаблонов, которые имеют гораздо более широкое применение (например, разделитель, агрегатор). Просмотрите индекс сайта EIP, чтобы получить представление об этом.
  5. Camel может взаимодействовать с другими системами, используя свой компонент JMS, который использует любого базового поставщика обмена сообщениями, поддерживающего этот API (Websphere, Sonic, OpenMQ и т.д.). Он также может взаимодействовать с другими технологиями обмена сообщениями, такими как те, которые поддерживают AMQP API.

Надеюсь, это поможет.