【问题标题】:ActiveMQ: Issue with queue lookupActiveMQ:队列查找问题
【发布时间】:2010-09-30 22:36:12
【问题描述】:

我已经按照documentation 中的描述在activemq.xml(ActiveMQ 5.2.0 版)中配置了一个队列。

<destinations>
    <queue physicalName="FOO.BAR" />
    <queue physicalName="DUMMY" />
</destinations>

我正在尝试使用以下代码从 java(在同一主机上)访问它:

Hashtable properties = new Hashtable();
properties.put(Context.INITIAL_CONTEXT_FACTORY, 
    "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
properties.put(Context.PROVIDER_URL, "tcp://localhost:61616");

context = new InitialContext(properties);

factory = (ConnectionFactory) context.lookup("ConnectionFactory");
connection = factory.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
queueName = "DUMMY"; // which can be either FOO.BAR or DUMMY
dest = (Destination) context.lookup(queueName);

我收到以下错误,尽管队列在 jconsole (Tree / org.apache.activemq / Queue) 中可见:

javax.naming.NameNotFoundException: DUMMY

请告诉我我做错了什么。非常非常感谢!

【问题讨论】:

    标签: java jms activemq


    【解决方案1】:

    首先,您不必explicitly create any queues in the broker,尽管它没有害处。

    此外,代理中可用的目的地也不会使用某种 JNDI 名称自动映射到 JNDI 上下文中。

    您可以这样做explicitly as described here。如果您想要 JNDI 的自动神奇填充,请使用 dynamicQueues/DUMMY 的 JNDI 命名约定作为您查找的 JNDI 名称(如 Dynamically creating destinations 中所述)

    【讨论】:

    • 感谢您解释创建主题/队列与将其映射到 JNDI 上下文之间存在差异。我怀疑我们试图解决的队列/主题连接问题源于创建 == JNDI 注册的假设。
    【解决方案2】:

    嗯..当我想听队列时,我通常会做这样的事情。 (从 javax.jms 导入)

    队列队列;

        // Connect to ActiveMQ
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(messageBrokerURL);
        connection = factory.createConnection();
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    
        // List to Dummy Queue
        queue = session.createQueue("DUMMY");
        messageConsumer = session.createConsumer(queue);
        messageConsumer.setMessageListener(queueHandler);
    
        // Start the connection
        connection.start();
    

    并确保您的 Handler 实现 MessageListener。

    【讨论】:

    • 谢谢伯尼。问题在于你有 ActiveMQ 特定的代码,我上面列出的代码也可以与其他 JMS 实现完美配合,即使用 OpenJms。
    猜你喜欢
    • 2012-01-21
    • 2012-12-02
    • 2016-10-23
    • 2016-10-29
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 2021-03-08
    相关资源
    最近更新 更多