Pregunta

He configurado una cola configurándola en activemq.xml (ActiveMQ versión 5.2.0) como se describe en documentación .

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

Estoy intentando acceder desde Java (en el mismo host) con el siguiente código:

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);

Recibo el siguiente error, aunque la cola está visible en jconsole (Tree / org.apache.activemq / Queue):

javax.naming.NameNotFoundException: DUMMY

Por favor dime qué estoy haciendo mal. Muchas, muchas gracias!

¿Fue útil?

Solución

En primer lugar, no tiene que crear explícitamente ninguna cola en el corredor aunque no hace daño.

Además, los destinos disponibles en el intermediario no se asignan automáticamente en un contexto JNDI para que usted use algún tipo de nombre JNDI.

Puede hacer esto explícitamente como se describe aquí . Si desea una población auto-mágica de JNDI, use la convención de nomenclatura JNDI de dynamicQueues / DUMMY como el nombre JNDI que busca (como se describe en Creación dinámica de destinos )

Otros consejos

Hmm ... bueno, cuando quiero escuchar una cola, generalmente hago algo como esto. (Importaciones de javax.jms)

Cola de cola;

    // 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();

Y asegúrese de que su controlador implemente MessageListener.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top