Spring 2.5引入了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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-2.5.xsd">
<!-- <bean/> definitions here -->
</beans>
这个命名空间由两级元素组成:<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>
上面的例子等同于在 第 19.4.4 节 “MessageListenerAdapter” 的示例中,定义两个不同的监听器容器和两个不同的 MessageListenerAdapter 。除了上面的属性外,listener 元素还具有几个可选的属性。下面的表格列出了所有的属性:
表 19.1. JMS listener 元素的属性
| 属性 | 描述 |
|---|---|
| id |
监听器容器的Bean名称。如果没有指定,将自动生成一个Bean名称。 |
| destination (必须) |
监听器目的地的名称,由 |
| ref (必须) |
处理对象的Bean名称 |
| method |
处理器中被调用的方法名。如果 |
| response-destination |
默认的响应目的地是发送响应消息抵达的目的地。 这用于请求消息没有包含"JMSReplyTo"域的情况。响应目的地类型被监听器容器的"destination-type"属性决定。记住:这仅仅适用于有返回值的监听器方法,因为每个结果对象都会被转化成响应消息。 |
| subscription |
持久订阅的名称,如果需要的话。 |
| selector |
监听器的一个可选的消息选择器。 |
<listener-container/>元素也有几个可选的属性。
这些属性允许像 基本的 JMS设置和资源引用一样来定义不同的策略 (例如
taskExecutor 和 destinationResolver)。
使用这些属性,可以定义很广泛的定制监听器容器,同时仍享有命名空间的便利。
<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也提高那个了事务选择和消息传输场景的讨论。
表 19.2. JMS <listener-container/> 元素的属性
| 属性 | 描述 |
|---|---|
| container-type |
监听器容器的类型。可用的选项是:
|
| connection-factory |
JMS |
| task-executor |
JMS监听器调用者Spring |
| destination-resolver |
|
| message-converter |
|
| destination-type |
监听器的JMS目的地类型。可用的选项包含:
|
| client-id |
这个监听器容器在JMS客户端的id。 |
| acknowledge |
本地JMS应答模式。可用的选项包含:
|
| transaction-manager |
Spring |
| concurrency |
每个监听器可激活的Session最大并发数。 |
| prefetch |
加载进每个Session的最大消息数。记住增加这个值会造成并发空闲。 |
使用“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可用的配置选项描述如下表:
表 19.3. JMS <jca-listener-container/> 元素的属性
| 属性 | 描述 |
|---|---|
| resource-adapter |
JCA |
| activation-spec-factory |
|
| destination-resolver |
|
| message-converter |
|
| destination-type |
监听器的JMS目的地类型。可用的选项包含 |
| client-id |
这个监听器容器在JMS客户端的id。 |
| acknowledge |
本地JMS应答模式。可用的选项包含: |
| transaction-manager |
Spring |
| concurrency |
每个监听器可激活的Session最大并发数。 |
| prefetch |
加载进每个Session的最大消息数。记住增加这个值会造成并发空闲。 |