キュー内のメッセージを管理できるツールをいくつか作成します。だから、私はキューからすべてのメッセージを取得することができます(エクスポートのようなもの)、そこからそれを削除しないでください。ActiveMQはキューからすべてのメッセージを取得します
私は、JMX APIを使用してみました:
ObjectName mbeanNameQueue = new ObjectName("org.apache.activemq:type=Broker,brokerName=static-broker1,destinationType=Queue,destinationName=tmp_queue2");
org.apache.activemq.broker.jmx.QueueViewMBean queueView = JMX.newMBeanProxy(mbsc, mbeanNameQueue, org.apache.activemq.broker.jmx.QueueViewMBean.class);
System.out.println(queueView.browseAsTable());
をしかし、私は400件の以上のメッセージを取得することはできません。
はまた、私はこのようなアプローチを使用:
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:55901");
ActiveMQConnection connection = (ActiveMQConnection)connectionFactory.createConnection();
DestinationSource ds = connection.getDestinationSource();
QueueSession queueSession = connection.createQueueSession(true, Session.CLIENT_ACKNOWLEDGE);
Queue queue = queueSession.createQueue("tmp_queue2");
QueueBrowser browser = queueSession.createBrowser(queue);
Enumeration<?> messagesInQueue = browser.getEnumeration();
while (messagesInQueue.hasMoreElements()) {
Message queueMessage = (Message) messagesInQueue.nextElement();
System.out.println(queueMessage);
}
しかしmessagesInQueue.hasMoreElements()は常にキュー多くのメッセージが含まれているにもかかわらず、falseを返します。
また、コンシューマを使用しようとすると、すべてのメッセージが取得されますが、キューから削除されます。
私は、コマンドラインツールを使用してキューからメッセージをエクスポートしようとした:
activemq browse --amqurl tcp://localhost:55901 tmp_queue2 >> messages22222.txt
しかし、キューが、それはそう
Failed to execute main task. Reason: java.lang.OutOfMemoryError: GC overhead limit exceeded
を投げるについて1000000メッセージが含まれている場合、どのように私はすべてのメッセージフォームを得ることができますキューから削除しないでください。
メッセージが届かない場合は、最初に接続を開始する必要があります。ブラウザからメッセージを繰り返したり、ブラウザオブジェクトを作成したりする前に、connection.start()を呼び出してください。 JMS仕様では、メッセージを消費する前に接続開始が必要であり、ブラウジングの仕組みについては言及していませんが、ブラウジングはあまり一般的ではないため、ActiveMQはおそらくそれ自体で実装しています。 – Matej
@Matej、ありがとう、私は接続を開始するのを忘れました。私はそれを開始したとき、私はキューから約5000のメッセージを読むことができましたが、それは次の要素を取得中に長い間停止しました.... – evgeniy44