19.6. JMS命名空间支持

Spring Framework

19.6. JMS命名空间支持

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 (必须)

监听器目的地的名称,由 DestinationResolver 的策略决定。

ref (必须)

处理对象的Bean名称

method

处理器中被调用的方法名。如果 ref 指向 MessageListener 或者 Spring SessionAwareMessageListener,则这个属性可以被忽略。

response-destination

默认的响应目的地是发送响应消息抵达的目的地。 这用于请求消息没有包含"JMSReplyTo"域的情况。响应目的地类型被监听器容器的"destination-type"属性决定。记住:这仅仅适用于有返回值的监听器方法,因为每个结果对象都会被转化成响应消息。

subscription

持久订阅的名称,如果需要的话。

selector

监听器的一个可选的消息选择器。

<listener-container/>元素也有几个可选的属性。 这些属性允许像 基本的 JMS设置和资源引用一样来定义不同的策略 (例如 taskExecutordestinationResolver)。 使用这些属性,可以定义很广泛的定制监听器容器,同时仍享有命名空间的便利。

<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

监听器容器的类型。可用的选项是: defaultsimpledefault102 或者 simple102 (默认值是 'default')。

connection-factory

JMS ConnectionFactory Bean的引用(默认的Bean名称是 'connectionFactory')。

task-executor

JMS监听器调用者Spring TaskExecutor 的引用。

destination-resolver

DestinationResolver 策略的引用,用以解析JMS Destinations

message-converter

MessageConverter 策略的引用,用以转换JMS Messages 成监听器方法的参数。默认值是 SimpleMessageConverter

destination-type

监听器的JMS目的地类型。可用的选项包含: queuetopic 或者 durableTopic (默认值是 'queue')。

client-id

这个监听器容器在JMS客户端的id。

acknowledge

本地JMS应答模式。可用的选项包含: autoclientdups-ok 或者 transacted (默认值是 'auto')。 'transacted' 的值可激活本地事务性 Session。 也可以通过指定下面介绍的 transaction-manager 属性。

transaction-manager

Spring PlatformTransactionManager 的引用。

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 ResourceAdapter Bean 的一个引用(默认的Bean名称是'resourceAdapter')。

activation-spec-factory

JmsActivationSpecFactory 的一个引用。 默认自动检测JMS提供者和它的 ActivationSpec 类 (参考 DefaultJmsActivationSpecFactory

destination-resolver

DestinationResolver 策略的引用,用以解析JMS Destinations

message-converter

MessageConverter 策略的引用,用以转换JMS Messages 成监听器方法参数。 默认值是 SimpleMessageConverter

destination-type

监听器的JMS目的地类型。可用的选项包含 queuetopic 或者 durableTopic 默认是 'queue')。

client-id

这个监听器容器在JMS客户端的id。

acknowledge

本地JMS应答模式。可用的选项包含:autoclientdups-ok 或者 transacted (默认值是 'auto')。 'transacted' 的值可激活本地事务性 Session。 也可以通过指定下面介绍的 transaction-manager 属性

transaction-manager

Spring JtaTransactionManager 或者 javax.transaction.TransactionManager 的引用,用以为传进的消息应用XA事务。 如果没有指定,将使用本地应答模型(参见“acknowledge”属性)。

concurrency

每个监听器可激活的Session最大并发数。

prefetch

加载进每个Session的最大消息数。记住增加这个值会造成并发空闲。