第 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>
Copy to Clipboard Toggle word wrap

例 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>
Copy to Clipboard Toggle word wrap

动态目的地的语法

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

dynamicQueues/QueueName
dynamicTopics/TopicName
Copy to Clipboard Toggle word wrap

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>
Copy to Clipboard Toggle word wrap

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

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat