14.5. 使用 WSDL 配置 JMS


14.5.1. JMS WSDL 扩展名称spance

用于定义 JMS 端点的 WSDL 扩展在命名空间 http://cxf.apache.org/transports/jms 中定义。要使用 JMS 扩展,您需要将 例 14.5 “JMS WSDL 扩展命名空间” 中显示的行添加到您的合同的 definitions 元素中。

例 14.5. JMS WSDL 扩展命名空间

xmlns:jms="http://cxf.apache.org/transports/jms"

14.5.2. 基本 JMS 配置

概述

JMS 地址信息使用 jms:address 元素及其子级提供,jms:JMSNamingProperties 元素。jms:address 元素的属性指定识别 JMS 代理和目的地所需的信息。jms:JMSNamingProperties 元素指定用于连接 JNDI 服务的 Java 属性。

重要

使用 JMS 功能指定的信息将覆盖端点的 WSDL 文件中的信息。

指定 JMS 地址

JMS 端点的基本配置通过将 jms:address 元素用作 服务端口 元素的子级来完成。WSDL 中使用的 jms:address 元素与配置文件中使用的 jms:address 元素相同。其属性列在 表 14.2 “JMS 端点属性” 中。

表 14.2. JMS 端点属性
属性描述

destinationStyle

指定 JMS 目标是否为 JMS 队列或 JMS 主题。

jndiConnectionFactoryName

指定连接到 JMS 目的地时要使用的 JMS 连接工厂的 JNDI 名称。

jmsDestinationName

指定发送请求的 JMS 目的地的 JMS 名称。

jmsReplyDestinationName

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

jndiDestinationName

指定绑定到将请求发送到的 JMS 目的地的 JNDI 名称。

jndiReplyDestinationName

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

connectionUserName

指定连接到 JMS 代理时使用的用户名。

connectionPassword

指定连接到 JMS 代理时要使用的密码。

jms:address WSDL 元素使用 jms:JMSNamingProperties 子元素来指定连接到 JNDI 提供程序所需的其他信息。

指定 JNDI 属性

为提高与 JMS 和 JNDI 提供程序的互操作性,jms:address 元素具有子元素 jms:JMSNamingProperties,允许您指定用于填充连接到 JNDI 提供程序时使用的属性的值。jms:JMSNamingProperties 元素有两个属性: namevaluename 指定要设置的属性的名称。value 属性指定指定属性的值。jms:JMSNamingProperties 元素也可用于指定提供程序特定属性。

以下是可设置的常用 JNDI 属性列表:

  1. java.naming.factory.initial
  2. java.naming.provider.url
  3. java.naming.factory.object
  4. java.naming.factory.state
  5. java.naming.factory.url.pkgs
  6. java.naming.dns.url
  7. java.naming.authoritative
  8. java.naming.batchsize
  9. java.naming.referral
  10. java.naming.security.protocol
  11. java.naming.security.authentication
  12. java.naming.security.principal
  13. java.naming.security.credentials
  14. java.naming.language
  15. java.naming.applet

有关这些属性中要使用的信息的更多详细信息,请检查您的 JNDI 提供程序文档,并查阅 Java API 参考材料。

示例

例 14.6 “JMS WSDL 端口规格” 显示 JMS WSDL 端口 规范的示例。

例 14.6. JMS WSDL 端口规格

<service name="JMSService">
  <port binding="tns:Greeter_SOAPBinding" name="SoapPort">
    <jms:address jndiConnectionFactoryName="ConnectionFactory"
                 jndiDestinationName="dynamicQueues/test.Celtix.jmstransport" >
      <jms:JMSNamingProperty name="java.naming.factory.initial"
                             value="org.activemq.jndi.ActiveMQInitialContextFactory" />
      <jms:JMSNamingProperty name="java.naming.provider.url"
                             value="tcp://localhost:61616" />
    </jms:address>
  </port>
</service>

14.5.3. JMS 客户端配置

概述

JMS 消费者端点指定它们使用的消息类型。JMS 消费者端点可以使用 JMS ByteMessage 或 JMS TextMessage

使用 ByteMessage 时,消费者端点使用 byte[] 作为将数据存储到 JMS 消息正文并检索数据的方法。发送消息后,消息数据(包括任何格式信息)被打包成一个 字节[],并在其放置在线上之前将其放入消息正文中。收到消息后,消费者端点将尝试 unmarshall 消息正文中存储的数据,就如同将其打包为 byte[] 一样。

使用 TextMessage 时,消费者端点使用字符串作为从消息正文存储和检索数据的方法。发送消息后,消息信息(包括任何格式特定信息)将转换为字符串,并放入 JMS 消息正文中。收到消息时,消费者端点将尝试 unmarshall 存储在 JMS 消息正文中的数据,就如同将其打包成字符串一样。

当原生 JMS 应用程序与 Apache CXF 用户交互时,JMS 应用程序负责解释消息和格式信息。例如,如果 Apache CXF 合同指定用于 JMS 端点的绑定是 SOAP,并且消息被打包为 TextMessage,则接收 JMS 应用会收到包含所有 SOAP envelope 信息的文本消息。

指定消息类型

JMS 消费者端点接受的消息类型使用可选的 jms:client 元素进行配置。jms:client 元素是 WSDL 端口 元素的子级,它有一个属性:

表 14.3. JMS Client WSDL 扩展

messageType

指定消息数据如何打包为 JMS 消息。text 指定数据将打包为 TextMessagebinary 指定数据将打包为 ByteMessage

示例

例 14.7 “用于 JMS 使用者端点的 WSDL” 显示用于配置 JMS 使用者端点的 WSDL。

例 14.7. 用于 JMS 使用者端点的 WSDL

<service name="JMSService">
  <port binding="tns:Greeter_SOAPBinding" name="SoapPort">
    <jms:address jndiConnectionFactoryName="ConnectionFactory"
                 jndiDestinationName="dynamicQueues/test.Celtix.jmstransport" >
      <jms:JMSNamingProperty name="java.naming.factory.initial"
                             value="org.activemq.jndi.ActiveMQInitialContextFactory" />
      <jms:JMSNamingProperty name="java.naming.provider.url"
                             value="tcp://localhost:61616" />
    </jms:address>
    <jms:client messageType="binary" />
  </port>
</service>

14.5.4. JMS 供应商配置

概述

JMS 提供程序端点具有许多可以配置的行为。它们是:

  • 消息关联方式
  • 使用持久订阅
  • 如果服务使用本地 JMS 事务
  • 端点使用的消息选择器

指定配置

提供程序端点行为使用可选的 jms:server 元素进行配置。jms:server 元素是 WSDL wsdl:port 元素的子级,具有以下属性:

表 14.4. JMS 供应商端点 WSDL 扩展
属性描述

useMessageIDAsCorrealationID

指定 JMS 是否将使用消息 ID 来关联消息。默认值为 false

durableSubscriberName

指定用于注册持久订阅的名称。

messageSelector

指定要使用的消息选择器的字符串值。有关用于指定消息选择器的语法的更多信息,请参阅 JMS 1.1 规格。

transactional

指定本地 JMS 代理是否将创建有关消息处理的事务。默认值为 false[a]

[a] 目前,运行时不支持将 transactional 属性设置为 true

示例

例 14.8 “用于 JMS 提供程序端点的 WSDL” 显示用于配置 JMS 提供程序端点的 WSDL。

例 14.8. 用于 JMS 提供程序端点的 WSDL

<service name="JMSService">
  <port binding="tns:Greeter_SOAPBinding" name="SoapPort">
    <jms:address jndiConnectionFactoryName="ConnectionFactory"
                 jndiDestinationName="dynamicQueues/test.Celtix.jmstransport" >
      <jms:JMSNamingProperty name="java.naming.factory.initial"
                             value="org.activemq.jndi.ActiveMQInitialContextFactory" />
      <jms:JMSNamingProperty name="java.naming.provider.url"
                             value="tcp://localhost:61616" />
    </jms:address>
    <jms:server messageSelector="cxf_message_selector"
                useMessageIDAsCorrelationID="true"
                transactional="true"
                durableSubscriberName="cxf_subscriber" />
  </port>
</service>
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.