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>
指定配置
您可以通过定义 bean 类 org.apache.cxf.transport.jms.JMSConfiguration
来指定 JMS 配置。Bean 的属性提供传输的配置设置。
在 CXF 3.0 中,JMS 传输不再依赖于 Spring JMS,因此删除了一些 Spring JMS 相关的选项。
表 14.1 “常规 JMS 配置属性” 列出提供商和消费者常用的属性。
属性 | 默认 | 描述 |
---|---|---|
| [required] 指定定义 JMS ConnectionFactory 的 bean 的引用。 | |
|
| 在 CXF 3.0 中删除
pre CXF 3.0 指定是否将 ConnectionFactory 替换为 Spring
在使用不含池连接的 ConnectionFactory 时启用此属性,因为它将提高 JMS 传输的性能。因此,因为 JMS 传输为每个消息创建一个新连接,并且 |
|
| 在 CXF 3.0 CXF 中已弃用,总是在异常时重新连接。 pre CXF 3.0 指定在出现异常时是否创建新连接。
使用 Spring
|
| 指定目的地的 JNDI 名称或特定于提供程序的名称。 | |
| 指定发送回复的 JMS 目的地的 JMS 名称。此属性允许使用用户定义的目的地进行回复。详情请查看 第 14.6 节 “使用 Named 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 侦听器容器可以应用的缓存级别。有效值为:
|
|
| 指定在使用主题时是否接收您自己的消息。
|
|
| 指定响应消息的时间(毫秒)。 |
|
|
指定是否明确为每条消息( |
|
| 指定消息是否持久。有效值为:
|
|
|
指定消息优先级。JMS 优先级值范围从 |
|
| 在丢弃了消息之前,以毫秒为单位指定时间。 |
|
| 指定是否使用 JMS 事务。 |
|
| 在 CXF 3.0 中删除 pre CXF 3.0 指定监听器的最小并发用户数量。 |
|
| 在 CXF 3.0 中删除 pre CXF 3.0 指定监听器的最大并发用户数量。 |
| 指定用于过滤传入消息的选择器的字符串值。这个属性可让多个连接共享一个队列。如需有关用于指定消息选择器的语法的更多信息,请参阅 JMS 1.1 规范。 | |
|
| 指定服务器是否使用 durable 订阅。 |
| 指定用于注册持久订阅的名称(字符串)。 | |
|
| 指定消息数据将如何打包为 JMS 消息。有效值为:
|
|
| 指定目标目的地是主题还是一个队列。有效值为:
|
|
| 指定 JMS 提供程序是否为 Tibco EMS。
当设置为 |
|
| 在 CXF 3.0 中删除 指定 JMS 是否将使用消息 ID 来关联消息。
当设置为 |
|
| CXF 3.0 指定 JMS 目标可能具有的最大暂停数。当当前数量超过指定的最大值时,JMSListenerContainer 将停止。 |
|
|
CXF 3.0 指定在超过
当其当前暂停的延续数低于 的值时 |
如 例 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
元素添加到端点的配置。 -
向 功能添加 bean 类型的
org.apache.cxf.transport.jms.JMSConfigFeature
。 -
将
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
元素的值是 JMSConfiguration
bean 的 ID。
例 14.4 “在 JMS conduit 中添加 JMS 配置” 显示使用 例 14.2 “JMS 配置 bean” 中的 JMS 配置的 JMS conduit。
例 14.4. 在 JMS conduit 中添加 JMS 配置
<jms:conduit name="{http://cxf.apache.org/jms_conf_test}HelloWorldQueueBinMsgPort.jms-conduit"> ... <jms:jmsConfig-ref>jmsConf</jms:jmsConfig-ref> </jms:conduit>