©
本文档使用
php.cn手册 发布
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的最大消息数。记住增加这个值会造成并发空闲。 |