Spring предусматривает пространство имен XML для упрощения конфигурации JMS. Чтобы использовать элементы пространства имен JMS, необходимо сослаться на схему JMS, как показано в следующем примере:
<?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" (1) xsi:schemaLocation=" http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/jms https://www.springframework.org/schema/jms/spring-jms.xsd">
<!-- определения бинов здесь -->
</beans>
- Ссылка на схему JMS.
Пространство имен состоит из трех элементов верхнего уровня: <annotation-driven/>, <listener-container/> и <jca-listener-container/>. <annotation-driven/> позволяет использовать конечные точки слушателей, управляемых аннотациями. <listener-container/> и <jca-listener-container/> определяют общую конфигурацию контейнера слушателей и могут содержать дочерние элементы <listener/>. В следующем примере показана базовая конфигурация для двух слушателей:
<jms:listener-container>
<jms:listener destination="queue.orders" ref="orderService" method="placeOrder"/>
<jms:listener destination="queue.confirmations" ref="confirmationLogger" method="log"/>
</jms:listener-container>
Предыдущий пример эквивалентен созданию двух разных определений бина контейнера слушателя и двух разных определений бина MessageListenerAdapter. Помимо атрибутов, показанных в предыдущем примере, элемент listener может содержать несколько необязательных атрибутов. В следующей таблице описаны все доступные атрибуты:
| Атрибут | Описание |
|---|---|
|
|
Имя бина для контейнера слушателя хостинга. Если не задано, имя бина генерируется автоматически. |
|
|
Имя адреса назначения для этого слушателя, разрешенное с помощью стратегии |
|
|
Имя бина объекта-обработчика. |
|
|
The name of the handler method to invoke. If the |
|
|
Имя метода обработчика, который нужно вызвать. Если атрибут |
|
|
The name of the durable subscription, if any. |
|
|
An optional message selector for this listener. |
|
|
The number of concurrent sessions or consumers to start for this listener. This value can either be a simple number indicating the maximum number (for example, |
Элемент <listener-container/> также принимает несколько необязательных атрибутов. Это позволяет настраивать различные стратегии (например, taskExecutor и destinationResolver), а также основные параметры JMS и ссылки на ресурсы. Используя эти атрибуты, можно определять контейнеры слушателей с высокой степенью индивидуализации и при этом пользоваться преимуществами пространства имен.
Можно автоматически передавать такие параметры как JmsListenerContainerFactory, указав id бина для передачи через атрибут factory-id, как показано в следующем примере:
<jms:listener-container connection-factory="myConnectionFactory" task-executor="myTaskExecutor" destination-resolver="myDestinationResolver" transaction-manager="myTransactionManager" concurrency="10">
<jms:listener destination="queue.orders" ref="orderService" method="placeOrder"/>
<jms:listener destination="queue.confirmations" ref="confirmationLogger" method="log"/>
</jms:listener-container>
В следующей таблице описаны все доступные атрибуты. Более подробную информацию об отдельных свойствах смотрите в javadoc на уровне класса по AbstractMessageListenerContainer и его конкретным подклассам. В javadoc также приводится описание выбора транзакций и сценариев повторной доставки сообщений.
| Атрибут | Описание |
|---|---|
|
|
Тип этого контейнера слушателя. Доступные параметры: |
|
|
Кастомный класс реализации контейнера слушателя в виде полного имени класса. По умолчанию используется стандартный для Spring |
|
|
Открывает настройки, определенные этим элементом, в виде |
|
|
Ссылка на JMS-бин |
|
|
Ссылка на |
|
|
Ссылка на стратегию |
|
|
Ссылка на стратегию |
|
|
Ссылка на стратегию |
|
|
Тип адреса назначения JMS для этого слушателя: |
|
|
Тип адреса назначения JMS для ответов: |
|
|
Идентификатор клиента JMS для этого контейнера слушателя. Нужно задавать его при использовании долговременных подписок. |
|
|
Уровень кэша для ресурсов JMS: |
|
|
Нативный режим подтверждения для JMS: |
|
|
Ссылка на внешний |
|
|
Количество параллельных сессий или потребителей, которые необходимо запустить для каждого слушателя. Может быть либо простым числом, обозначающее максимальное количество (например, |
|
|
Максимальное количество сообщений, загружаемых в одну сессию. Обратите внимание, что увеличение этого числа может привести к "голоданию" одновременных потребителей. |
|
|
Время ожидания (в миллисекундах), которое будет использоваться для вызовов приема. По умолчанию – |
|
|
Задает экземпляр |
|
|
Задает интервал между попытками восстановления, в миллисекундах. Предусматривает удобный способ создания |
|
|
Фаза жизненного цикла, в рамках которой этот контейнер должен запускаться и останавливаться. Чем меньше значение, тем раньше запускается этот контейнер и тем позже он останавливается. По умолчанию используется |
Настройка контейнера слушателя на основе JCA с поддержкой схемы jms очень похожа, и это можно увидеть в следующем примере:
<jms:jca-listener-container resource-adapter="myResourceAdapter" destination-resolver="myDestinationResolver" transaction-manager="myTransactionManager" concurrency="10">
<jms:listener destination="queue.orders" ref="myMessageListener"/>
</jms:jca-listener-container>
В следующей таблице описаны доступные варианты конфигурации для варианта JCA:
| Атрибут | Описание |
|---|---|
|
|
Открывает настройки, определенные этим элементом, в виде |
|
|
Ссылка на бин |
|
|
Ссылка на |
|
|
Ссылка на стратегию |
|
|
Ссылка на стратегию |
|
|
JMS-тип адреса назначения для слушателя: |
|
|
Тип адреса назначения JMS для ответов: |
|
|
Идентификатор клиента JMS для этого контейнера слушателя. Его необходимо задавать при использовании долговременных подписок. |
|
|
Нативный режим подтверждения для JMS: |
|
|
Ссылка на Spring |
|
|
Количество параллельных сессий или потребителей, которые необходимо запустить для каждого слушателя. Может быть либо простым числом, обозначающее максимальное количество (например, |
|
|
Максимальное количество сообщений, загружаемых в одну сессию. Обратите внимание, что увеличение этого числа может привести к "голоданию" одновременных потребителей. |
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ