ActiveMQ: Emissão com fila de pesquisa
Pergunta
Eu configurar uma fila, configurando-o em activemq.xml (ActiveMQ versão 5.2.0), conforme descrito na documentação .
<destinations>
<queue physicalName="FOO.BAR" />
<queue physicalName="DUMMY" />
</destinations>
Eu estou tentando acessá-lo de java (no mesmo host) com o seguinte 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);
Estou receveing ??o seguinte erro, embora a fila é visível no jconsole (árvore / org.apache.activemq / Fila):
javax.naming.NameNotFoundException: DUMMY
Por favor me diga o que eu estou fazendo errado. Muito, muito obrigado!
Solução
Em primeiro lugar você não tem que criar explicitamente qualquer filas em o corretor que não faz mal.
NãoAlém disso, os destinos disponíveis no corretor são auto-magicamente mapeados em um contexto JNDI para você usar algum tipo de nome JNDI.
Você pode fazer isso explicitamente como descrito aqui . Se você quiser população auto-mágico de JNDI em seguida, usar a convenção JNDI nomeação de dynamicQueues / MANEQUIM como o nome JNDI que você pesquisa (conforme descrito na dinamicamente criando destinos )
Outras dicas
Hmm .. bem quando eu quero ouvir uma fila que eu costumo fazer algo parecido com isso. (As importações provenientes javax.jms)
Queue fila;
// 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 certifique-se de que seus instrumentos Handler MessageListener.