문제

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를 구현하는지 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top