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 配置属性
属性默认描述

connectionFactory

 

[required] 指定定义 JMS ConnectionFactory 的 bean 的引用。

wrapInSingleConnectionFactory

true [pre v3.0]

在 CXF 3.0 中删除

pre CXF 3.0 指定是否将 ConnectionFactory 替换为 Spring SingleConnectionFactory

在使用不含池连接的 ConnectionFactory 时启用此属性,因为它将提高 JMS 传输的性能。因此,因为 JMS 传输为每个消息创建一个新连接,并且 SingleConnectionFactory 需要缓存连接,因此可以重复使用它。

reconnectOnException

false

在 CXF 3.0 CXF 中已弃用,总是在异常时重新连接。

pre CXF 3.0 指定在出现异常时是否创建新连接。

使用 Spring SingleConnectionFactory 嵌套 ConnectionFactory 时:

  • true TOKEN-TOKENon a exception, 创建新连接

    在使用 PooledConnectionFactory 时不要启用这个选项,因为这个选项只返回池的连接,但不会重新连接。

  • 例外情况为 false 的 TOKEN- lpron,不要尝试重新连接

targetDestination

 

指定目的地的 JNDI 名称或特定于提供程序的名称。

replyDestination

 

指定发送回复的 JMS 目的地的 JMS 名称。此属性允许使用用户定义的目的地进行回复。详情请查看 第 14.6 节 “使用 Named Reply Destination”

destinationResolver

DynamicDestinationResolver

指定 Spring DestinationResolver 的引用。

通过此属性,您可以定义目标名称如何解析为 JMS 目的地。有效值为:

  • 使用 JMS 提供程序的功能,DestinationResolver solv-resolve 目的地名称。
  • 使用 JNDI 进行 JndiDestinationResolver WWN-resolve 目的地名称。

transactionManager

 

指定 Spring 事务管理器的引用。这使得该服务能够参与 JTA 事务。

taskExecutor

SimpleAsyncTaskExecutor

在 CXF 3.0 中删除

pre CXF 3.0 指定对 Spring TaskExecutor 的引用。这用于监听器来确定如何处理传入的信息。

useJms11

false

在 CXF 3.0 中删除,CXF 3.0 仅支持 JMS 1.1 功能。

pre CXF 3.0 指定是否使用 JMS 1.1 功能。有效值为:

  • true TOKEN-JMSJMS 1.1 功能
  • false — JMS 1.0.2 features

messageIdEnabled

true

在 CXF 3.0 中删除

pre CXF 3.0 指定 JMS 传输是否希望 JMS 代理来提供消息 ID。有效值为:

  • true containerruntime-keyringbroker 需要提供消息 ID
  • false WWN-broker 需要提供消息 ID

    在本例中,端点将调用消息 producer 的 setDisableMessageID () 方法,值为 true。然后,为代理提供一个提示,它不需要生成消息 ID,或将其添加到端点的消息中。代理可以接受 hint 或忽略它。

messageTimestampEnabled

true

在 CXF 3.0 中删除

pre CXF 3.0 指定 JMS 传输是否希望 JMS 代理提供消息时间戳。有效值为:

  • true WWN-keyringbroker 需要提供消息时间戳
  • false 的 WWN-BUFFERbroker 不需要提供消息时间戳

    在本例中,端点将调用消息 producer 的 setDisableMessageTimestamp () 方法,值为 true。然后,为代理提供一个提示,它不需要生成时间戳或将其添加到端点的消息中。代理可以接受 hint 或忽略它。

cacheLevel

-1 ( 禁用功能)

在 CXF 3.0 中删除

pre CXF 3.0 指定 JMS 侦听器容器可以应用的缓存级别。有效值为:

  • 0 — CACHE_NONE
  • 1 — CACHE_CONNECTION
  • 2 — CACHE_SESSION
  • 3 — CACHE_CONSUMER
  • 4 — CACHE_AUTO

详情请参阅 Class DefaultMessageListenerContainer

pubSubNoLocal

false

指定在使用主题时是否接收您自己的消息。

  • true TOKEN- lprdo 没有接收您自己的信息
  • false WWN-receive 您自己的消息

receiveTimeout

60000

指定响应消息的时间(毫秒)。

explicitQosEnabled

false

指定是否明确为每条消息(true)或默认值(false)设置 QoS 设置(如 priority、persistent 和 time to live)。

deliveryMode

2

指定消息是否持久。有效值为:

  • 1 ( NON_PERSISTENT)-messages 只保留内存
  • 2 (PERSISTENT)-messages 会保留给磁盘

priority

4

指定消息优先级。JMS 优先级值范围从 0 ( 最低)到 9 (最高)。详情请参阅您的 JMS 供应商的文档。

timeToLive

0 (indefinitely)

在丢弃了消息之前,以毫秒为单位指定时间。

sessionTransacted

false

指定是否使用 JMS 事务。

concurrentConsumers

1

在 CXF 3.0 中删除

pre CXF 3.0 指定监听器的最小并发用户数量。

maxConcurrentConsumers

1

在 CXF 3.0 中删除

pre CXF 3.0 指定监听器的最大并发用户数量。

messageSelector

 

指定用于过滤传入消息的选择器的字符串值。这个属性可让多个连接共享一个队列。如需有关用于指定消息选择器的语法的更多信息,请参阅 JMS 1.1 规范

subscriptionDurable

false

指定服务器是否使用 durable 订阅。

durableSubscriptionName

 

指定用于注册持久订阅的名称(字符串)。

messageType

text

指定消息数据将如何打包为 JMS 消息。有效值为:

  • text WWN-WWNspec 表示该数据将打包为 文本消息
  • byte horizon-encryptspec 表示数据将打包为一个字节数组(byte[])
  • 二进制 WWN-WWNspec 表示该数据将打包为一个 ByteMessage

pubSubDomain

false

指定目标目的地是主题还是一个队列。有效值为:

  • true ALLOW-topictopic
  • false — queue

jmsProviderTibcoEms

false

指定 JMS 提供程序是否为 Tibco EMS。

当设置为 true 时,安全性上下文中的主体会填充来自 JMS_TIBCO_SENDER 标头。

useMessageIDAsCorrelationID

false

在 CXF 3.0 中删除

指定 JMS 是否将使用消息 ID 来关联消息。

当设置为 true 时,客户端会设置生成的关联 ID。

maxSuspendedContinuations

-1 ( 禁用功能)

CXF 3.0 指定 JMS 目标可能具有的最大暂停数。当当前数量超过指定的最大值时,JMSListenerContainer 将停止。

reconnectPercentOfMax

70

CXF 3.0 指定在超过 maxSuspendedContinuations 时重启 JMSListenerContainer 停止的时间。

当其当前暂停的延续数低于 的值时 (maxSuspendedContinuations * reconnectPercentOfMax/100),则监听器容器将重启

例 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 功能机制直接应用于服务器和客户端端点。要做到这一点:

  1. 将端点的 address 属性设置为 jms://
  2. jaxws:feature 元素添加到端点的配置。
  3. 向 功能添加 bean 类型的 org.apache.cxf.transport.jms.JMSConfigFeature
  4. 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>
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.