14.2. 使用 JMS 配置 bean
概述
为简化 JMS 配置并使其更加强大,Apache CXF 使用单一 JMS 配置 bean 配置来配置 JMS 端点。bean 由 org.apache.cxf.transport.jms.JMSConfiguration
类实施。它可用于直接配置端点,或者配置 JMS conduit 和目的地。
配置命名空间
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
来指定 JMS 配置。an 的属性提供传输的配置设置。
在 CXF 3.0 中,JMS 传输不再依赖于 Spring JMS,因此删除了一些与 Spring JMS 相关的选项。
表 14.1 “常规 JMS 配置属性” 列出对提供程序和消费者通用的属性。
属性 | 默认 | 描述 |
---|---|---|
| [required] 指定对定义 JMS ConnectionFactory 的 bean 的引用。 | |
|
| CXF 3.0 中删除
预先 CXF 3.0 指定是否将 ConnectionFactory 与 Spring
在使用没有池连接的 ConnectionFactory 时启用此属性,因为它可以提高 JMS 传输的性能。这是因为 JMS 传输为每个消息创建新连接,并且需要 |
|
| 在 发生异常时,CXF 中已弃用 CXF 始终重新连接。 pre CXF 3.0 指定在出现异常时是否创建新连接。
使用 Spring
|
| 指定目的地的 JNDI 名称或供应商名称。 | |
| 指定发送回复的 JMS 目的地的 JMS 名称。此属性允许使用用户定义的目的地来回复。详情请查看 第 14.6 节 “使用 Named Reply Destination”。 | |
| DynamicDestinationResolver |
指定对 Spring 此属性允许您定义目标名称如何解析到 JMS 目的地。有效值为:
|
| 指定对 Spring 事务管理器的引用。这可让服务参与 JTA 事务。 | |
|
| CXF 3.0 中删除 前 CXF 3.0 指定对 Spring TaskExecutor 的引用。这在监听程序中用来决定如何处理传入的信息。 |
|
| CXF 3.0 CXF 3.0 中删除 仅支持 JMS 1.1 功能。 前 CXF 3.0 指定是否使用了 JMS 1.1 功能。有效值为:
|
|
| CXF 3.0 中删除 前 CXF 3.0 指定 JMS 传输是否希望 JMS 代理提供消息 ID。有效值为:
|
|
| CXF 3.0 中删除 前 CXF 3.0 指定 JMS 传输是否希望 JMS 代理提供消息时间戳。有效值为:
|
|
| CXF 3.0 中删除 前 CXF 3.0 指定 JMS 侦听器容器可以应用的缓存级别。有效值为:
|
|
| 指定在使用主题时是否收到您自己的消息。
|
|
| 指定时间(以毫秒为单位),以等待响应消息。 |
|
|
指定每个消息是否明确设置 QoS 设置(如优先级、持久性、时间为实时),或使用默认值( |
|
| 指定消息是否持久。有效值为:
|
|
|
指定消息优先级。JMS 优先级值的范围是从 |
|
| 指定丢弃的消息前的时间(以毫秒为单位)。 |
|
| 指定是否使用了 JMS 事务。 |
|
| CXF 3.0 中删除 前 CXF 3.0 指定侦听器的最小并发用户数。 |
|
| CXF 3.0 中删除 前 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” 所示,an 的属性被指定为 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
元素的值是 JMSConfiguration
bean 的 ID。
例 14.4 “将 JMS 配置添加到 JMS conduit” 显示使用来自 例 14.2 “JMS 配置 bean” 的 JMS 配置的 JMS conduit。
例 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>