JMS Namespace Support
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">
<!-- bean definitions here -->
</beans>
1 | Referencing the JMS schema. |
该命名空间由三个顶级元素组成: <annotation-driven/>
、 <listener-container/>`和 `<jca-listener-container/>
。<annotation-driven/>`允许 annotation-driven listener endpoints的使用。
<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>
前面这个示例相当于创建两个不同的侦听器容器 beanDefinition 元素和两个不同的 MessageListenerAdapter
bean 定义,如 xref:integration/jms/receiving.adoc#jms-receiving-async-message-listener-adapter[Using MessageListenerAdapter
中所示。除了前面示例中所示的属性之外,listener
元素还可以包含几个可选属性。下表描述了所有可用的属性:
Attribute | Description |
---|---|
|
用于托管监听器容器的 bean 名称。如果没有指定该名称,系统会自动生成。 |
|
此侦听器的目标名称,通过 |
|
处理程序对象的 bean 名称。 |
|
要调用的处理程序方法的名称。如果 |
|
要将响应消息发送到的默认响应目标的名称。这是针对不包含 |
|
如果有的话,durable 订阅的名称。 |
|
此侦听器的可选消息选择器。 |
|
为该侦听器启动的并发会话或使用者的数量。此值可以是一个简单的数字,表示最大数量(例如, |
<listener-container/>
元素还接受几个可选属性。这允许自定义各种策略(例如,taskExecutor
和 destinationResolver
)以及基本的 JMS 设置和资源引用。通过使用这些属性,你可以定义高度定制的侦听器容器,同时仍然受益于命名空间的便利性。
你可以自动公开诸如 JmsListenerContainerFactory
的设置,方法是通过 factory-id
attribute 指定要公开的 bean 的 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>
下表描述了所有可用的属性。请参阅 AbstractMessageListenerContainer
及其具体子类的类级别 javadoc 以获取每个属性的更多详细信息。javadoc 还讨论了事务选择和消息重新发送的场景。
Attribute | Description |
---|---|
|
此侦听器容器类型。可用的选项是 |
|
一个自定义侦听器容器实现类作为完全限定类名。缺省值为 Spring 的标准 |
|
将此元素定义的设置公开为 |
|
对 JMS |
|
对 JMS 侦听器调用者的 Spring |
|
对用于解析 JMS |
|
对用于将 JMS 消息转换为侦听器方法参数的 |
|
对用于处理在 |
|
此侦听器的 JMS 目标类型: |
|
答复的 JMS 目标类型: |
|
此侦听容器的 JMS 客户端 ID。在使用持久订阅时,必须指定该 ID。 |
|
JMS 资源的缓存级别: |
|
本机 JMS 确认模式: |
|
对外部 |
|
针对每个侦听器启动的并发会话或消费者的数量。它可以是表示最大数量的简单数字(例如 |
|
加载到单个会话中的消息的最大数量。请注意,增加此数字可能会导致并发消费者匮乏。 |
|
接收调用使用的超时(以毫秒为单位)。默认值为 |
|
指定要用于计算恢复尝试间隔的 |
|
指定恢复尝试之间的间隔,以毫秒为单位。它提供了一种便捷的方法来创建具有指定间隔的 |
|
此容器应启动和停止的生命周期阶段。值越低,该容器启动越早,停止时间越晚。默认值为 |
使用 jms
模式支持配置基于 JCA 的侦听器容器的方式与以下所示示例非常相似:
<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 变量中可用的配置选项进行了说明:
Attribute | Description |
---|---|
|
将此元素定义的设置公开为 |
|
对 JCA |
|
对 |
|
解析 JMS |
|
对 |
|
此侦听器的 JMS 目标类型: |
|
答复的 JMS 目标类型: |
|
此侦听器容器的 JMS 客户端 ID。在使用持久订阅时需要指定它。 |
|
原生 JMS 确认模式: |
|
引用 Spring |
|
为每个侦听器启动的并发会话或消费者的数量。它可以是表示最大数量的简单数字(例如 |
|
加载到单个会话中的消息的最大数量。请注意,增加此数字可能会导致并发消费者匮乏。 |