JMS 命名空间支持
Spring 提供了一个 XML 命名空间,用于简化 JMS 配置。要使用 JMS 命名空间元素,你需要引用 JMS schema,示例如下
<?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 | 引用 JMS schema。 |
该命名空间包含三个顶级元素:<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>
前面的示例等同于创建两个独立的监听器容器 Bean 定义和两个独立的 MessageListenerAdapter
Bean 定义,如使用 MessageListenerAdapter
中所示。除了前面示例中显示的属性之外,listener
元素还可以包含一些可选属性。下表描述了所有可用属性
属性 | 描述 |
---|---|
|
托管监听器容器的 Bean 名称。如果未指定,则会自动生成一个 Bean 名称。 |
|
此监听器的目标名称,通过 |
|
处理程序对象的 Bean 名称。 |
|
要调用的处理程序方法名称。如果 |
|
发送响应消息的默认响应目标名称。当请求消息不包含 |
|
持久订阅的名称(如果有)。 |
|
此监听器的可选消息选择器。 |
|
为此监听器启动的并发会话或消费者数量。此值可以是一个表示最大数量的简单数字(例如 |
<listener-container/>
元素也接受几个可选属性。这允许自定义各种策略(例如 taskExecutor
和 destinationResolver
)以及基本的 JMS 设置和资源引用。通过使用这些属性,你可以定义高度定制的监听器容器,同时仍然受益于命名空间的便利性。
通过 factory-id
属性指定要暴露的 Bean 的 id
,你可以自动将这些设置暴露为 JmsListenerContainerFactory
,以便它们可以被其他端点重用,示例如下
<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 还讨论了事务选择和消息重发场景。
属性 | 描述 |
---|---|
|
此监听器容器的类型。可用选项包括 |
|
自定义监听器容器实现类,使用完全限定类名。默认是 Spring 的标准 |
|
使用指定的 |
|
对 JMS |
|
对 Spring |
|
对 |
|
对 |
|
对 |
|
此监听器的 JMS 目标类型: |
|
响应的 JMS 目标类型: |
|
此监听器容器的 JMS 客户端 ID。使用持久订阅时必须指定它。 |
|
JMS 资源的缓存级别: |
|
原生 JMS 确认模式: |
|
对外部 |
|
为每个监听器启动的并发会话或消费者数量。可以是一个表示最大数量的简单数字(例如 |
|
加载到单个会话中的最大消息数。请注意,增加此数字可能会导致并发消费者的资源匮乏。 |
|
接收调用的超时时间(以毫秒为单位)。默认是 |
|
指定用于计算恢复尝试间隔的 |
|
指定恢复尝试之间的间隔,以毫秒为单位。它提供了一种方便的方式来创建具有指定间隔的 |
|
此容器应在其生命周期内启动和停止的阶段。值越低,此容器启动得越早,停止得越晚。默认值是 |
使用 jms
schema 支持配置基于 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 变体的可用配置选项
属性 | 描述 |
---|---|
|
使用指定的 |
|
对 JCA |
|
对 |
|
对 |
|
对 |
|
此监听器的 JMS 目标类型: |
|
响应的 JMS 目标类型: |
|
此监听器容器的 JMS 客户端 ID。使用持久订阅时需要指定它。 |
|
原生 JMS 确认模式: |
|
对 Spring |
|
为每个监听器启动的并发会话或消费者数量。可以是一个表示最大数量的简单数字(例如 |
|
加载到单个会话中的最大消息数。请注意,增加此数字可能会导致并发消费者的资源匮乏。 |