Question

J'ai configuré une file d'attente en la configurant dans le fichier activemq.xml (ActiveMQ version 5.2.0), comme décrit dans la section documentation .

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

J'essaie d'y accéder à partir de Java (sur le même hôte) avec le code suivant:

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

Je reçois le message d'erreur suivant, même si la file d'attente est visible dans jconsole (Tree / org.apache.activemq / Queue):

javax.naming.NameNotFoundException: DUMMY

S'il vous plaît dites-moi ce que je fais mal. Merci beaucoup!

Était-ce utile?

La solution

Tout d'abord, vous n'avez pas à créer explicitement les files d'attente dans le courtier , même si cela ne nuit pas.

De même, les destinations disponibles dans le courtier ne sont pas automatiquement mappées par magie dans un contexte JNDI utilisant un nom JNDI.

Vous pouvez le faire explicitement comme décrit ici . Si vous souhaitez une population JNDI auto-magique, utilisez la convention de dénomination JNDI de dynamicQueues / DUMMY en tant que nom JNDI recherché (comme décrit dans la section Création dynamique de destinations )

Autres conseils

Hum .. eh bien, quand je veux écouter une file d'attente, je fais habituellement quelque chose comme ça. (Importations de javax.jms)

File d'attente;

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

Et assurez-vous que votre gestionnaire implémente MessageListener.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top