2011-10-28 2 views
1

다음 코드가 있습니다. 대기열에 액세스하려고하는데 자원을 소비하려고합니다. 얼마나 많은 요소가 대기열에 있고 얼마나 많은 것이 남아 있는지 잘 모릅니다. 따라서 while(true)을 수행하고 있지만이 경우에는 나중에 오류가 발생하는 연결을 닫을 수 없습니다. 그 과정은 죽지 않는다. 내가 그걸 멈췄을지라도.대기열에 더 많은 요소가 있는지 확인

대기열에 항목이 더있는 경우 어떻게 찾으면 다음 작업을 수행 할 수 있습니까? ActiveMqQueueBrowser를 보았지만 내부적으로 정말 사용하기가 쉽지 않습니다.

무엇을 하시겠습니까? 너는 무엇을 권하고 싶니?

ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url); 
    Connection connection = connectionFactory.createConnection(); 
    connection.start(); 

    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 

    Destination destination = session.createQueue(subject); 

    MessageConsumer consumer = session.createConsumer(destination); 

    while(true){ 
      Message message = consumer.receive(); 

      if (message instanceof TextMessage) { 
       TextMessage textMessage = (TextMessage) message; 
       System.out.println("message from queue : '" + textMessage.getText() + "'"); 
      } 
    } 

    // unreachable code. compiler complains. 
    // connection.close(); 
+0

유료 서비스입니까? – KarlP

답변

0

다른 스레드가 있어야하는 것처럼 들립니다. 듣기를 언제 끝내야하는지 어떻게 알 수 있습니까? 그것 consumerQueue가 더 이상 값이있는 경우 경우이를 시도하지 :

while(true){ 
     Message message = consumer.receive(//some int timeout); 
     if (message == null) 
     { 
      break; 
     } 

     if (message instanceof TextMessage) { 
      TextMessage textMessage = (TextMessage) message; 
      System.out.println("message from queue : '" + textMessage.getText() + "'"); 
     } 
} 

그렇지 않으면 당신이 옳다, 루프는 반환하지 않습니다 그리고 당신은 원, JVM이 내려 오면 t 올바르게 연결을 닫을 수 있습니다.

0

그럼 더 많은 메시지가 도착할 때까지 기다리시겠습니까? 메시지가 더 이상 올 수 없다는 보장이 없다면, 그것이 "완료"되었을 때 정말로 말할 수 없습니다.

시간 제한을 으로 지정하거나 receiveNoWait()으로 전화를 걸어 반환 값이 null이면 중단 할 수 있습니다. 즉, 지정된 기간 동안 사용할 수있는 메시지가 없습니다.

+0

나는 당신이 말하는 것을 보았습니다. 감사 – user1019164

0

실제로 ActiveMQ의 주어진 대상에서 사용할 수있는 것을 결정하기위한 몇 가지 옵션이 있습니다. 브로커는 JMX에 대한 많은 정보를 제공하므로 사용자가 편안하면 대기열에 추가되는 메시지 수에 연결할 수 있습니다. JMX를 사용하지 않는 또 다른 옵션은 Broker Statistics 플러그인을 사용하는 것입니다. 이 플러그인을 사용하면 ReplyTo 대상이 설정된 브로커에게 메시지를 보낼 수 있으며 대상의 현재 통계가 포함 된 메시지로 응답합니다. 통계 플러그인 here에 대한 설명서를 참조하십시오.

관련 문제