문제
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
내가 뭘 잘못하고 있는지 말 해주세요. 많은 감사합니다!
해결책
먼저 당신은 그럴 필요가 없습니다 브로커에 대기열을 명시 적으로 만듭니다 해를 끼치 지 않지만.
또한 브로커에서 이용할 수있는 대상은 JNDI 이름을 사용하여 JNDI 컨텍스트에 자동으로 매핑되지 않습니다.
당신은 이것을 할 수 있습니다 여기에 설명 된대로 명시 적으로. JNDI의 자동 마그네틱 인구를 원한다면 JNDI 명명 규칙을 사용하십시오. Dynamicqueues/더미 JNDI 이름으로 당신이 조회합니다 ( 동적으로 목적지를 생성합니다)
다른 팁
흠 .. 글쎄요, 대기열을 듣고 싶을 때 나는 보통 이런 일을합니다. (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를 구현하는지 확인하십시오.
제휴하지 않습니다 StackOverflow