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 配置属性” 列出提供程序和消费者通用的属性。

表 14.1. 常规 JMS 配置属性
属性默认描述

connectionFactory

 

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

wrapInSingleConnectionFactory

true [pre v3.0]

在 CXF 3.0 中删除

pre CXF 3.0 指定是否使用 Spring SingleConnectionFactory 包装 ConnectionFactory。

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

reconnectOnException

false

在 CXF 3.0 CXF 中弃用,当出现异常时始终重新连接。

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

当使用 Spring SingleConnectionFactory 嵌套 ConnectionFactory 时:

  • true criu-wagonon 一个例外,创建一个新连接

    在使用 PooledConnectionFactory 时不要启用此选项,因为此选项仅返回池连接,但不会重新连接。

  • 异常错误,不要尝试重新连接

targetDestination

 

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

replyDestination

 

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

destinationResolver

DynamicDestinationResolver

指定对 Spring DestinationResolver 的引用。

此属性允许您定义目的地名称如何解析到 JMS 目的地。有效值为:

  • 使用 JMS 提供程序的功能,DynamicDestinationResolver 可以解析目的地名称。
  • 使用 JNDI 的 JndiDestinationResolver criu- iwlresolve 目的地名称。

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 criu-wagonJMS 1.1 功能
  • false criu- iwlJMS 1.0.2 功能

messageIdEnabled

true

在 CXF 3.0 中删除

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

  • true criu-wagonbroker 需要提供消息 ID
  • false criu-wagonbroker 不需要提供消息 ID

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

messageTimestampEnabled

true

在 CXF 3.0 中删除

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

  • true criu-criubroker 需要提供消息时间戳
  • false criu-wagonbroker 不需要提供消息时间戳

    在本例中,端点调用其消息制作者的 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

详情请参阅 类 DefaultMessageListenerContainer

pubSubNoLocal

false

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

  • true criu-wagondo 没有接收您自己的消息
  • false criu-wagonreceive your own messages

receiveTimeout

60000

指定响应消息的时间(以毫秒为单位)。

explicitQosEnabled

false

指定 QoS 设置(如优先级、持久性、生存时间)是否明确为每个消息设置(true)或者使用默认值(false)。

deliveryMode

2

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

  • 1 (NON_PERSISTENT)-messages 仅保留内存
  • 2 (PERSISTENT)-messages 持久保留到磁盘

priority

4

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

timeToLive

0 ( 通常)

指定发送的消息前的时间(以毫秒为单位)。

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

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

durableSubscriptionName

 

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

messageType

text

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

  • 文本 ProductShortName-wagonspec 表示数据将打包为 TextMessage
  • byte criu-wagonspec 表示数据将打包为字节数组(byte[])
  • 二进制 criu-wagonspec 表示数据将打包为 ByteMessage

pubSubDomain

false

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

  • true — topic
  • 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 指定何时重启 JMSListenerContainer 停止以超过 maxSuspendedContinuations

当当前暂停的延续的数量低于 (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. 向该功能中添加类型为 org.apache.cxf.transport.jms.JMSConfigFeature 的 bean。
  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 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>
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.