14.2. 使用 JMS 配置 bean
概述
为简化 JMS 配置并使其更加强大,Apache CXF 使用单个 JMS 配置 bean 来配置 JMS 端点。bean 由 org.apache.cxf.transport.jms.JMSConfiguration
类实施。它可用于直接配置端点,或配置 JMS conduits 和目的地。
配置命名空间
JMS 配置 bean 使用 Spring p-namespace 使配置尽可能简单。要使用这个命名空间,您需要在配置的根元素中声明它,如 例 14.1 “声明 Spring p-namespace” 所示。
例 14.1. 声明 Spring p-namespace
<beans ... xmlns:p="http://www.springframework.org/schema/p" ... > ... </beans>
指定配置
您可以通过定义类 org.apache.cxf.transport.jms.JMSConfiguration
的 bean 来指定 JMS 配置。bean 的属性提供传输的配置设置。
在 CXF 3.0 中,JMS 传输不再依赖于 Spring JMS,因此删除了一些与 Spring JMS 相关的选项。
表 14.1 “常规 JMS 配置属性” 列出提供程序和消费者通用的属性。
属性 | 默认 | 描述 |
---|---|---|
| [required] 指定定义 JMS ConnectionFactory 的 bean 的引用。 | |
|
| 在 CXF 3.0 中删除
pre CXF 3.0 指定是否使用 Spring
在使用不池连接的 ConnectionFactory 时启用此属性,因为它将提高 JMS 传输的性能。这是因为 JMS 传输为每个消息创建新连接,并且需要 |
|
| 在 CXF 3.0 CXF 中弃用,当出现异常时始终重新连接。 pre CXF 3.0 指定在发生异常时是否创建新连接。
当使用 Spring
|
| 指定目的地的 JNDI 名称或特定于提供程序的名称。 | |
| 指定发送回复的 JMS 目的地的名称。此属性允许使用用户定义的目的地进行回复。详情请查看 第 14.6 节 “使用命名的 Reply Destination”。 | |
| DynamicDestinationResolver |
指定对 Spring 此属性允许您定义目的地名称如何解析到 JMS 目的地。有效值为:
|
| 指定对 Spring 事务管理器的引用。这可让服务参与 JTA 事务。 | |
|
| 在 CXF 3.0 中删除 pre CXF 3.0 指定对 Spring TaskExecutor 的引用。这用于监听程序来决定如何处理传入的信息。 |
|
| 在 CXF 3.0 CXF 3.0 中删除,仅支持 JMS 1.1 功能。 pre CXF 3.0 指定是否使用 JMS 1.1 功能。有效值为:
|
|
| 在 CXF 3.0 中删除 pre CXF 3.0 指定 JMS 传输是否希望 JMS 代理提供消息 ID。有效值为:
|
|
| 在 CXF 3.0 中删除 pre CXF 3.0 指定 JMS 传输是否希望 JMS 代理提供消息时间戳。有效值为:
|
|
| 在 CXF 3.0 中删除 pre CXF 3.0 指定 JMS 侦听程序容器可能应用的缓存级别。有效值为:
|
|
| 指定在使用主题时是否接收您自己的消息。
|
|
| 指定响应消息的时间(以毫秒为单位)。 |
|
|
指定 QoS 设置(如优先级、持久性、生存时间)是否明确为每个消息设置( |
|
| 指定消息是否持久。有效值为:
|
|
|
指定消息优先级。JMS 优先级值范围从 |
|
| 指定发送的消息前的时间(以毫秒为单位)。 |
|
| 指定是否使用 JMS 事务。 |
|
| 在 CXF 3.0 中删除 pre CXF 3.0 指定监听器的最小并发用户数。 |
|
| 在 CXF 3.0 中删除 pre CXF 3.0 指定监听器的最大并发用户数。 |
| 指定用于过滤传入消息的选择器的字符串值。此属性使多个连接能够共享一个队列。有关用于指定消息选择器的语法的更多信息,请参阅 JMS 1.1 规范。 | |
|
| 指定服务器是否使用持久订阅。 |
| 指定用于注册持久订阅的名称(字符串)。 | |
|
| 指定消息数据如何打包为 JMS 消息。有效值为:
|
|
| 指定目标目的地是主题还是队列。有效值为:
|
|
| 指定 JMS 提供程序是否为 Tibco EMS。
当设置为 |
|
| 在 CXF 3.0 中删除 指定 JMS 是否将使用消息 ID 来关联消息。
当设置为 |
|
| CXF 3.0 指定 JMS 目的地可能具有的最大暂停暂停次数。当当前数量超过指定的最大值时,JMSListenerContainer 会停止。 |
|
|
CXF 3.0 指定何时重启 JMSListenerContainer 停止以超过
当当前暂停的延续的数量低于 |
如 例 14.2 “JMS 配置 bean” 所示,bean 的属性被指定为 bean
元素的属性。它们都在 Spring p
命名空间中声明。
例 14.2. JMS 配置 bean
<bean id="jmsConfig" class="org.apache.cxf.transport.jms.JMSConfiguration" p:connectionFactory="jmsConnectionFactory" p:targetDestination="dynamicQueues/greeter.request.queue" p:pubSubDomain="false" />
将配置应用到端点
JMSConfiguration
bean 可以使用 Apache CXF 功能机制直接应用到服务器和客户端端点。要做到这一点:
-
将端点的
address
属性设置为jms://
。 -
在端点配置中添加
jaxws:feature
元素。 -
向该功能中添加类型为
org.apache.cxf.transport.jms.JMSConfigFeature
的 bean。 -
将
bean
元素的p:jmsConfig-ref
属性设置为JMSConfiguration
bean 的 ID。
例 14.3 “将 JMS 配置添加到 JAX-WS 客户端” 显示使用 例 14.2 “JMS 配置 bean” 中的 JMS 配置的 JAX-WS 客户端。
例 14.3. 将 JMS 配置添加到 JAX-WS 客户端
<jaxws:client id="CustomerService" xmlns:customer="http://customerservice.example.com/" serviceName="customer:CustomerServiceService" endpointName="customer:CustomerServiceEndpoint" address="jms://" serviceClass="com.example.customerservice.CustomerService"> <jaxws:features> <bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.cxf.transport.jms.JMSConfigFeature" p:jmsConfig-ref="jmsConfig"/> </jaxws:features> </jaxws:client>
将配置应用到传输中
JMSConfiguration
bean 可以利用 jms:jmsConfig-ref
元素应用到 JMS conduits 和 JMS 目的地。jms:jmsConfig-ref
element's 的值是 JMSConfiguration
bean 的 ID。
例 14.4 “将 JMS 配置添加到 JMS conduit” 显示使用 例 14.2 “JMS 配置 bean” 中的 JMS 配置的 JMS。
例 14.4. 将 JMS 配置添加到 JMS conduit
<jms:conduit name="{http://cxf.apache.org/jms_conf_test}HelloWorldQueueBinMsgPort.jms-conduit"> ... <jms:jmsConfig-ref>jmsConf</jms:jmsConfig-ref> </jms:conduit>