Domanda

Ho impostato una coda configurandola in activemq.xml (ActiveMQ versione 5.2.0) come descritto in documentazione .

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

Sto provando ad accedervi da Java (sullo stesso host) con il seguente codice:

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

Ricevo il seguente errore, sebbene la coda sia visibile in jconsole (Tree / org.apache.activemq / Queue):

javax.naming.NameNotFoundException: DUMMY

Per favore, dimmi cosa sto facendo di sbagliato. Molte, molte grazie!

È stato utile?

Soluzione

Innanzitutto non è necessario creare esplicitamente alcuna coda in il broker sebbene non faccia alcun danno.

Inoltre le destinazioni disponibili nel broker non vengono mappate automaticamente in un contesto JNDI usando un qualche tipo di nome JNDI.

Puoi farlo esplicitamente come descritto qui . Se si desidera una popolazione auto-magica di JNDI, utilizzare la convenzione di denominazione JNDI di dynamicQueues / DUMMY come nome JNDI che si cerca (come descritto in Creazione dinamica di destinazioni )

Altri suggerimenti

Hmm .. bene quando voglio ascoltare una coda di solito faccio qualcosa del genere. (Importazioni da javax.jms)

Coda di coda;

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

E assicurati che il tuo gestore implementa MessageListener.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top