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 |
|
Количество параллельных сессий или потребителей, которые необходимо запустить для каждого слушателя. Может быть либо простым числом, обозначающее максимальное количество (например, |
|
Максимальное количество сообщений, загружаемых в одну сессию. Обратите внимание, что увеличение этого числа может привести к "голоданию" одновременных потребителей. |
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ