Tôi liệt kê các hàng đợi và thông điệp từ mỗi hàng đợi. Sau đây là mã của tôi. Tuy nhiên, QueueBrowser không truy xuất thư một cách chính xác.QueueBrowser không trả lại tất cả các tin nhắn
Giả sử, tôi có hàng đợi có tên là TestQueue có 1000 thư.
lần đầu tiên tôi chạy chương trình của mình, chương trình chỉ hiển thị 200 thư. giây - 400 thứ ba - 600 ra - 800 thứ năm - 1000
Bạn có thể cho tôi biết cách khắc phục sự cố này không?
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();
Bạn đã giải quyết được sự cố này chưa? – rdmueller
@Ralf, Chưa. Tôi cũng nhận thấy rằng ngay cả Web Console cũng có thể truy xuất 200 thư lúc đầu. Sau đó, vào lần thứ hai cố gắng duyệt lại, số lượng thư đã tăng lên 400. 600, 800 tiếp theo. Tôi đã kiểm tra mã Web Console và thấy rằng nó cũng đã sử dụng QueueBrowser. –
giải pháp hiện tại của tôi là tiêu thụ tất cả tin nhắn mà không cần xác nhận. Vì vậy, tôi có thể nhận được tất cả các tin nhắn và vẫn có thể duy trì chúng trong hàng đợi. nhưng, tôi cảm thấy nó không đáng tin cậy. giải pháp tiếp theo là duyệt hàng đợi một lần nữa và một lần nữa cho đến khi số lượng tin nhắn tối đa được đáp ứng. –