Главная » Spring » Настройка брокера сообщений в Spring

0

ActiveMQ – отличный брокер сообщений, распространяемый с открытыми исходными текстами, и замечательный выбор для ор- ганизации асинхронного обмена сообщениями посредством JMS. На момент написания этих строк текущей была версия ActiveMQ 5.4.2. Прежде чем приступать к работе с ActiveMQ, необходимо получить дистрибутив, который можно загрузить по адресу: http://activemq. apache.org. После загрузки дистрибутива распакуйте его в каталог на жестком диске. В подкаталоге lib распакованного дистрибутива отыщите файл activemqcore-5.4.2.jar. Этот файл необходимо доба- вить в библиотеку классов (classpath) приложения, чтобы получить возможность пользоваться ActiveMQ API.

В каталоге bin имеются несколько подкаталогов, предназначенных для различных операционных систем. Внутри этих подкаталогов находятся сценарии запуска ActiveMQ. Например, чтобы запустить ActiveMQ в Mac OS X, выполните сценарий activemq из каталога bin/ macosx. Через мгновение после этого ActiveMQ будет готов к приему сообщений.

Создание фабрики соединений

В этой главе будут рассматриваться различные способы отправки и приема сообщений с помощью фреймворка Spring. Во всех случа- ях, чтобы иметь возможность отправлять сообщения через брокер, нам потребуется использовать фабрику соединений JMS. Поскольку

в этой главе предполагается использовать брокер ActiveMQ, необхо- димо настроить фабрику соединений JMS так, чтобы она создавала соединения с ActiveMQ. В состав ActiveMQ входит собственная фабрика соединений ActiveMQConnectionFactory, которая настраивается в Spring, как показано ниже:

<bean  id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">

<property  name="brokerURL"  value="tcp://localhost:61616"/>

</bean>

Кроме того, поскольку известно, что будет использоваться брокер ActiveMQ, для объявления фабрики соединений можно использо- вать пространство имен, определяемое брокером ActiveMQ (доступ- но во всех версиях ActiveMQ, начиная с версии 4.1). Сначала не- обходимо подключить пространство имен amq в конфигурационном XML-файле Spring:

<?xml  version="1.0"  encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jms="http://www.springframework.org/schema/jms" xmlns:amq="http://activemq.apache.org/schema/core" xsi:schemaLocation="http://activemq.apache.org/schema/core

http://activemq.apache.org/schema/core/activemq-core-5.5.0.xsd http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

</beans>

А затем с помощью элемента <amq:connectionFactory> объявить фаб- рику соединений:

<amq:connectionFactory  id="connectionFactory" brokerURL="tcp://localhost:61616"/>

Обратите внимание, что элемент <amq:connectionFactory>  является особенностью брокера ActiveMQ. При использовании других реа- лизаций брокера сообщений конфигурационные пространства имен могут отсутствовать, и в этом случае необходимо объявлять фабрику соединений как обычный компонент.

Далее в этой главе мы часто будем возвращаться к определению компонента connectionFactory. Но сейчас достаточно будет знать, что атрибут brokerURL определяет местоположение брокера. В данном случае URL в атрибуте brokerURL сообщает, что брокер действует на локальном компьютере и принимает соединения на порту с номером 61616 (номер порта, используемый брокером ActiveMQ по умолча- нию).

Объявление приемников ActiveMQ

Помимо фабрики соединений, необходимо настроить приемник, откуда можно будет извлекать сообщения. Приемник может быть ли- бо очередью, либо темой, в зависимости от потребностей приложения.

Независимо от типа приемника, очередь или тема, компонент- приемник должен быть настроен как экземпляр класса, характер- ного для используемого брокера сообщений. Например, следующее объявление <bean> определяет очередь ActiveMQ:

<bean   id="queue"   class="org.apache.activemq.command.ActiveMQQueue">

<constructor-arg value="spitter.queue"/>

</bean>

Аналогично следующее объявление <bean> определяет тему ActiveMQ:

<bean id="topic" class="org.apache.activemq.command.ActiveMQTopic">

<constructor-arg  value="spitter.topic"/>

</bean>

В обоих случаях элемент <constructor-arg> определяет имя очере- ди или темы, которая будет использоваться брокером сообщений – spitter.topic в последнем примере.

Как и в случае с фабрикой соединений, в пространстве имен ActiveMQ предоставляется альтернативный способ объявления оче- редей и тем. Для определения очереди можно использовать элемент

<amq:queue>:

<amq:queue  id="queue"  physicalName="spitter.queue"  />

А для определения темы – элемент <amq:topic>:

<amq:topic  id="topic"  physicalName="spitter.topic"  />

В обоих случаях атрибут physicalName определяет имя канала об- мена сообщениями.

К настоящему моменту было показано, как объявлять основные компоненты для отправки и приема сообщений. Теперь можно при- ступать к непосредственной реализации операций. Для этого вос- пользуемся классом JmsTemplate, входящим в состав Spring и являю- щимся основой поддержки JMS в Spring. Но, чтобы оценить все преимущества использования класса JmsTemplate, сначала посмотрим, как реализовать обмен сообщениями без него.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии