2012-11-15 4 views
8

각 큐의 큐와 메시지를 나열합니다. 다음은 내 코드입니다. 그러나 QueueBrowser는 메시지를 올바르게 검색하지 못합니다.QueueBrowser가 모든 메시지를 반환하지 않습니다.

즉, 1000 개의 메시지가있는 TestQueue라는 대기열이 있습니다.

처음으로 프로그램을 실행하면 200 개의 메시지 만 표시됩니다. 두 번째 - 400 셋째 - 600 등 - 800 다섯 번째 -

(1000)는 어떻게이 문제를 해결하는 방법을 말해 줄래? javax.jms.QueueBrowser API에서

ConnectionFactory out = new ActiveMQConnectionFactory("tcp://localhost:61616?jms.prefetchPolicy.all=10000"); 
ActiveMQConnection connection = (ActiveMQConnection) out.createConnection(); 

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

Set<ActiveMQQueue> amqs = connection.getDestinationSource().getQueues(); 
Iterator<ActiveMQQueue> queues = amqs.iterator(); 

while (queues.hasNext()) 
{ 
    ActiveMQQueue queue_t = aqueues.next(); 
    String q_name = queue_t.getPhysicalName(); 
    List<ActiveMQMessage> msgList = ((ActiveMQSession) session).getUnconsumedMessages(); 

    System.out.println("\nQueue = " + q_name); 

    QueueBrowser queueBrowser = session.createBrowser(queue_t); 
    Enumeration e = queueBrowser.getEnumeration(); 

    int numMsgs = 0; 
    while(e.hasMoreElements()) 
    { 
     Message message = (Message) e.nextElement(); 
     numMsgs++; 
    } 
    System.out.println("No of messages = " + numMsgs); 
    queueBrowser.close(); 
}      
session.close(); 
connection.close(); 
+0

이 문제를 해결 했습니까? – rdmueller

+0

@Ralf, 아직 없습니다. 또한 웹 콘솔조차도 처음에는 200 개의 메시지를 검색 할 수 있습니다. 그런 다음 두 번째로 다시 탐색하려고 시도 할 때 msg 수가 400으로 증가했습니다. 다음 600, 800. 웹 콘솔 코드를 검사하여 QueueBrowser도 사용함을 발견했습니다. –

+0

현재 나의 해결책은 인정하지 않고 모든 메시지를 소비하는 것입니다. 그래서, 나는 모든 메시지를 얻을 수 있으며 큐에서 메시지를 유지할 수 있습니다. 그러나 나는 그것이 신뢰할 수 없다고 느낍니다. 다음 해결책은 max msg 카운트가 충족 될 때까지 대기열을 다시 열람하는 것입니다. –

답변

3

:

메시지가 도착 및 스캔이 수행되는 동안 만료 될 수 있습니다. JMS API는 열거 내용을 대기열 컨텐츠의 정적 스냅 샷으로 요구하지 않습니다. 이러한 변경 사항이 표시되는지 여부는 JMS 공급자에 따라 다릅니다.

prefetch policy을 지정해 보셨습니까?

+0

답변 주셔서 감사하지만 프리 페치 정책을 추가 한 후 동작이 동일합니다. 문제의 코드를 편집했습니다. –

0

JMX를 사용하여 Broker에 연결하면됩니다 (예 : jconsole 사용). 특정 대기열에서 MaxPageSize 속성을 200 이상으로 설정하면 더 많은 메시지를 나열 할 수 있습니다.

관련 문제