#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 возможных взаимосвязей и ссылаюсь на них ниже:
- JMS: ActiveMQ — Я понимаю, что ActiveMQ является реализацией JMS, так же как Hibernate является реализацией JPA. Правильно ли это?
- ActiveMQ: Camel — У Camel есть возможность отправлять сообщения в любую реализацию JMS, такую как ActiveMQ. В этом случае ActiveMQ является конечной точкой camel. Правильно?
- EIP:Camel — Camel является реализацией EIPs. Понимание того, что такое EIP, в первую очередь, также важно для моего понимания всей этой настройки.
- EIP: JMS — Хотя между этими двумя может и не быть прямой связи, создается впечатление, что обмен сообщениями лежит в основе EIP, а JMS — это основа Java для обмена сообщениями. Справедлива ли это оценка?
- Я оставил отношения между EIP: ActiveMQ и JMS: Camel на случай, если между этими системами существуют какие-либо «большие концепции», о которых я должен знать.
Мы высоко ценим любую помощь в создании простого для понимания определения EIP и в понимании того, как все эти компоненты соотносятся друг с другом. Заранее спасибо!
Ответ №1:
- ActiveMQ — это реализация MOM. Он предоставляет клиентскую реализацию JMS API для использования языками JVM. JMS — это всего лишь API, но реализации привязаны к любому брокеру, с которым они взаимодействуют, с помощью проводного формата, поэтому вы не можете использовать реализацию ActiveMQ JMS для взаимодействия, например, с WebsphereMQ. Существуют другие API для взаимодействия с ActiveMQ с других языковых платформ — C / C через CMS, .Net через NMS. Вы также можете взаимодействовать с ActiveMQ с помощью других «не похожих на JMS» механизмов, таких как через протокол STOMP, который имеет клиентские библиотеки на Ruby, Javascript и других.
- ДА.
- Да и нет. Camel использует тот же «язык», что и EIPs, поэтому, используя Camel, вы естественным образом улавливаете EIPs. Сказав это, знание их позволяет вам понять, что вы ищете в API. Я рекомендую Camel в действии, чтобы получить хорошее представление о двух и обратиться к сайту EIP (http://www.eaipatterns.com /) когда вы хотите получить немного больше информации.
- Снова да и нет. Существует ряд шаблонов, реализованных с помощью обмена сообщениями (JMS — это только один вариант), но существует большое количество шаблонов, которые имеют гораздо более широкое применение (например, разделитель, агрегатор). Просмотрите индекс сайта EIP, чтобы получить представление об этом.
- Camel может взаимодействовать с другими системами, используя свой компонент JMS, который использует любого базового поставщика обмена сообщениями, поддерживающего этот API (Websphere, Sonic, OpenMQ и т.д.). Он также может взаимодействовать с другими технологиями обмена сообщениями, такими как те, которые поддерживают AMQP API.
Надеюсь, это поможет.