Red Hat Training
A Red Hat training course is available for Red Hat Fuse
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 配置属性” 列出提供商和消费者常用的属性。
表 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属性设置为JMSConfigurationbean 的 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>