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的最大消息数。记住增加这个值会造成并发空闲。 |