ActiveMQ: проблема с поиском очереди - PullRequest
6 голосов
/ 12 января 2009

Я настроил очередь, настроив ее в 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

Пожалуйста, скажите мне, что я делаю не так. Большое, большое спасибо!

Ответы [ 2 ]

8 голосов
/ 12 января 2009

Во-первых, вам не нужно явно создавать какие-либо очереди в брокере , хотя это не вредит.

Кроме того, пункты назначения, доступные в посреднике, автоматически не отображаются в контексте JNDI для вас, используя какое-то имя JNDI.

Вы можете сделать это явно, как описано здесь . Если вы хотите автоматическое магическое заполнение JNDI, тогда используйте соглашение об именах JNDI dynamicQueues / DUMMY в качестве имени JNDI, которое вы ищите (как описано в Динамически создаваемые назначения )

0 голосов
/ 13 января 2009

Хм .. ну, когда я хочу послушать очередь, я обычно делаю что-то подобное. (Импорт из 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();

И убедитесь, что ваш обработчик реализует MessageListener.

...