Kuyruktaki iletileri yönetebilecek bir araç oluşturmak istiyorum. Bu yüzden kuyruktaki tüm iletileri (ihracat gibi bir şey) elde edebilmek ve oradan kaldırmamak istiyorum. ActiveMQ kuyruktan tüm iletileri al
Ben JMX API kullanmaya çalıştı: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());
Ama 400'den fazla mesaj alınamıyor.
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);
}
ama her zaman kuyrukta rağmen false döndüren() messagesInQueue.hasMoreElements içeren çok mesaj:
Ayrıca böyle bir yaklaşım kullanılır.Ayrıca, tüketiciyi kullanmaya çalışırsam, tüm iletileri alır, ancak sıradan kaldırır.
Ben komut satırı aracını kullanarak sıradan iletileri ihraç etmeye çalıştı:
activemq browse --amqurl tcp://localhost:55901 tmp_queue2 >> messages22222.txt
Ama kuyruk yaklaşık 1000000 mesajlar içeriyorsa o
Failed to execute main task. Reason: java.lang.OutOfMemoryError: GC overhead limit exceeded
Yani, tüm iletiler oluşturan alabilirim nasıl atar sıra ve onları oradan kaldırmayın mı?
İleti gönderilmediğinde, önce bağlantıyı başlatmanız gerekir. İletileri tarayıcıdan yinelemeden veya tarayıcı nesnesini oluşturmadan önce connect.start() öğesini çağırın. JMS belirtimi, mesajların tüketilmesinden önce bağlantı başlangıcının gerekli olduğunu, tarama işleminin nasıl çalışması gerektiğine dair bir açıklama yapılmadığını, ancak tarama işleminin bu kadar yaygın bir etkinlik olmadığı için ActiveMQ'nun muhtemelen kendisi tarafından uygulandığını söylüyor. – Matej
@Matej, teşekkürler, bağlantıyı başlatmayı unuttum. Başladığımda kuyruktan yaklaşık 5000 mesaj okuyabiliyordum ama sonra bir sonraki öğeyi alırken uzun bir süre durdu .... – evgeniy44