【问题标题】:How to add JNDI destinations (Topics and Queues) with ActiveMQ?如何使用 ActiveMQ 添加 JNDI 目标(主题和队列)?
【发布时间】:2020-10-08 10:11:36
【问题描述】:

我不想使用jdni.properties 文件,所以要向我的 JNDI 设置添加新属性,我写了以下内容:

    Hashtable<String, Object> jndi_env = new Hashtable<String, Object>();
    jndi_env.put(InitialContext.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
    jndi_env.put("connectionFactory.ConnectionFactory","vm://0");
    jndi_env.put("topic.example","example");

我的问题是,当我调用这个类时:

initialContext = new InitialContext(jndi_env);

由于我在最后一行传递了一个名称参数,因此会查找一个 URL 上下文工厂。

这使我的代码寻找我实际上不想要的tcp://localhost:61616 连接。

我看到有

QueueConnectionFactory: org.apache.activemq.ActiveMQConnectionFactory
example: org.apache.activemq.command.ActiveMQTopic
XAConnectionFactory: org.apache.activemq.ActiveMQXAConnectionFactory

这是我不想要的,或者至少不是他们的类型。

如果我使用我的 jndi.properties 文件进行检查而不传递参数,但我没有遇到建立 tcp 连接的问题,那么我会发现:

ConnectionFactory: org.apache.activemq.artemis.jms.client.ActiveMQJMSConnectionFactory
queue: org.apache.activemq.artemis.jndi.ReadOnlyContext
queue/exampleQueue: org.apache.activemq.artemis.jms.client.ActiveMQQueue
dynamicTopics: org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory$2
dynamicQueues: org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory$1

那么我怎样才能改变我添加的jndi_env.put("topic.example","example"); 的对象类型,所以它会是这样的(当然是主题)

queue: org.apache.activemq.artemis.jndi.ReadOnlyContext
queue/exampleQueue: org.apache.activemq.artemis.jms.client.ActiveMQQueue

【问题讨论】:

    标签: java jms jndi activemq-artemis


    【解决方案1】:

    当您创建 InitialContext 时,您进入了错误的工厂。目前您正在传递org.apache.activemq.jndi.ActiveMQInitialContextFactory。这是 ActiveMQ 5.x 的工厂,而不是 Artemis。您需要传入org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory,例如:

    Hashtable<String, Object> jndi_env = new Hashtable<String, Object>();
    jndi_env.put(InitialContext.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory");
    jndi_env.put("connectionFactory.ConnectionFactory","vm://0");
    jndi_env.put("topic.example","example");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2021-12-28
      • 2016-06-01
      • 1970-01-01
      • 2012-05-22
      • 2013-02-04
      相关资源
      最近更新 更多