Как написать брокера JMS? - PullRequest
0 голосов
/ 17 июня 2020

Как работает служба сообщений Java в отношении брокеров? Я вижу учебные пособия и примеры по созданию клиентов-производителей и потребителей, но я не понимаю, как привлечь брокера с JMS. Я вижу, что есть, например, ActiveMQ, где можно легко создать класс для реализации брокера, но тогда похоже, что мне также нужно использовать методы ActiveMQ в моих клиентах для создания соединения с брокером вместо использования pure JMS-методы?

1 Ответ

1 голос
/ 17 июня 2020

JMS API - это, по сути, клиентский API. Он определяет API, который клиент будет использовать для взаимодействия с брокером. Как брокер реализован, является совершенно произвольным, если поведение реализации соответствует спецификации JMS. Это дает тем, кто внедряет брокера JMS, широкую свободу в реализации его в соответствии с их собственными требованиями и ограничениями. Это также означает, что создание и настройка экземпляра брокера (каким бы брокером он ни был) не определяется JMS API.

Более того, спецификация JMS устанавливает соглашение , что клиенты могут найти свои «административные объекты» (т.е. фабрики соединений и места назначения) в JNDI. В разделе 5.1 спецификации JMS 2 говорится:

Хотя интерфейсы для администрируемых объектов явно не зависят от JNDI, JMS устанавливает соглашение, согласно которому клиенты JMS находят их, просматривая их в пространстве имен с помощью JNDI.

Из-за этого соглашения большинство поставщиков JMS также предоставляют реализацию JNDI для использования вместе с реализацией JMS. ActiveMQ предоставляет это через класс org.apache.activemq.jndi.ActiveMQInitialContextFactory. Использование и конфигурация этой реализации JNDI обсуждается далее в документации ActiveMQ .

Поскольку использование JNDI - это всего лишь соглашение , большинство поставщиков JMS имеют альтернативные способы доступа к объектам администрирования. . Например, ActiveMQ позволяет программно создать экземпляр фабрики соединений или назначения с использованием классов c, специфичных для ActiveMQ.

Чтобы подключить клиент JMS к соответствующему брокеру, вам сначала нужно решить, хотите ли вы использовать JNDI или c механизм, определяемый провайдером. Вообще говоря, JNDI является предпочтительным методом, поскольку он является подключаемым (с использованием свойств, определенных в файле jndi.properties в пути к классам приложения), что упрощает переключение между брокерами JMS при необходимости. Как только это решение будет принято, вы приобретете экземпляр javax.jms.ConnectionFactory и используете его для создания javax.jms.Connection, et c. Существует множество руководств и документации о том, как писать клиенты JMS после этого момента.

В конечном итоге нет строгой необходимости использовать что-либо, кроме API-интерфейсов JMS и JNDI в ваших клиентских приложениях при подключении к ActiveMQ.

...