第 15 章 与 Apache ActiveMQ 集成


概述

如果您使用 Apache ActiveMQ 作为 JMS 提供程序,则目的地的 JNDI 名称可以通过特殊格式来指定,为队列或主题动态创建 JNDI 绑定。这意味着,不要 提前使用您的队列或主题的 JNDI 绑定配置 JMS 提供程序。

初始上下文工厂

将 Apache ActiveMQ 与 JNDI 集成的关键是 ActiveMQInitialContextFactory 类。此类用于创建 JNDI InitialContext 实例,然后使用它来访问 JMS 代理中的 JMS 目的地。

例 15.1 “用于连接到 Apache ActiveMQ 的 SOAP/JMS WSDL” 显示 SOAP/JMS WSDL 扩展,以创建与 Apache ActiveMQ 集成的 JNDI InitialContext

例 15.1. 用于连接到 Apache ActiveMQ 的 SOAP/JMS WSDL

<soapjms:jndiInitialContextFactory>
  org.apache.activemq.jndi.ActiveMQInitialContextFactory
</soapjms:jndiInitialContextFactory>
<soapjms:jndiURL>tcp://localhost:61616</soapjms:jndiURL>

例 15.1 “用于连接到 Apache ActiveMQ 的 SOAP/JMS WSDL” 中,Apache ActiveMQ 客户端连接到位于 tcp://localhost:61616 的代理端口。

查找连接工厂

除了创建 JNDI InitialContext 实例外,您必须指定绑定到 javax.jms.ConnectionFactory 实例的 JNDI 名称。对于 Apache ActiveMQ,在 InitialContext 实例中有一个预定义的绑定,它将 JNDI 名称 ConnectionFactory 映射到 ActiveMQConnectionFactory 实例。例 15.2 “用于指定 Apache ActiveMQ 连接工厂的 SOAP/JMS WSDL” 填充用于指定 Apache ActiveMQ 连接工厂的 SOAP/JMS 扩展元素。

例 15.2. 用于指定 Apache ActiveMQ 连接工厂的 SOAP/JMS WSDL

<soapjms:jndiConnectionFactoryName>
  ConnectionFactory
</soapjms:jndiConnectionFactoryName>

动态目的地的语法

要动态访问队列或主题,请使用以下格式将目的地的 JNDI 复合名称指定为 JNDI 复合名称:

dynamicQueues/QueueName
dynamicTopics/TopicName

queueNameTopicName 是 Apache ActiveMQ 代理使用的名称。它们不是 抽象 JNDI 名称。

例 15.3 “带有动态创建的队列的 WSDL 端口规格” 显示使用动态创建的队列的 WSDL 端口。

例 15.3. 带有动态创建的队列的 WSDL 端口规格

<service name="JMSService">
  <port binding="tns:GreeterBinding" name="JMSPort">
    <jms:address jndiConnectionFactoryName="ConnectionFactory"
                 jndiDestinationName="dynamicQueues/greeter.request.queue" >
      <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>

当应用尝试打开 JMS 连接时,Apache ActiveMQ 将检查是否存在一个带有 JNDI 名称 greeter.request.queue 的队列。如果不存在,它将创建一个新的队列,并将它绑定到 JNDI 名称 greeter.request.queue

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.