8

キューと各キューからのメッセージをリストします。以下は私のコードです。ただし、QueueBrowser はメッセージを正しく取得しません。

たとえば、1000 件のメッセージを持つ TestQueue という名前のキューがあるとします。

プログラムを初めて実行すると、200 メッセージしか表示されません。2 番目 - 400 3 番目 - 600 4 番目 - 800 5 番目 - 1000

この問題を解決する方法を教えてもらえますか?

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();
4

2 に答える 2

3

javax.jms.QueueBrowserAPIから:

スキャンの実行中に、メッセージが到着して期限切れになる場合があります。JMS API では、列挙の内容がキューの内容の静的スナップショットである必要はありません。これらの変更が表示されるかどうかは、JMS プロバイダーによって異なります。

プリフェッチ ポリシーを指定してみましたか?

于 2012-11-15T14:55:07.427 に答える
0

JMX を使用して Broker に接続するだけです (たとえば、jconsole を使用します)。特定のキューで MaxPageSize プロパティを 200 以上に設定すると、より多くのメッセージを一覧表示できます。

于 2014-03-17T14:23:02.480 に答える