Jms 如何从ActiveMQ代理获取所有消息?
所以我有一个ActiveMQ代理和一些生产者,他们在代理中放置一些自制的对象。我还有一些消费者可以毫无问题地接收这些消息(序列化对象)。但是我想创建一个连接到代理并显示所有消息(序列化对象)的工具 我尝试使用和ActiveMQConnection执行此操作:Jms 如何从ActiveMQ代理获取所有消息?,jms,activemq,Jms,Activemq,所以我有一个ActiveMQ代理和一些生产者,他们在代理中放置一些自制的对象。我还有一些消费者可以毫无问题地接收这些消息(序列化对象)。但是我想创建一个连接到代理并显示所有消息(序列化对象)的工具 我尝试使用和ActiveMQConnection执行此操作: Set<ActiveMQQueue> currentMessageQueues = activeMQConnection.getDestinationSource().getQueues(); Iterator<Activ
Set<ActiveMQQueue> currentMessageQueues = activeMQConnection.getDestinationSource().getQueues();
Iterator<ActiveMQQueue> messageQueueIterator = currentMessageQueues.iterator();
while (messageQueueIterator.hasNext()) {
ActiveMQQueue currentQueue = messageQueueIterator.next();
QueueSession queueSession = activeMQConnection.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);
QueueBrowser browser = queueSession.createBrowser(currentQueue);
Enumeration<?> messagesInQueue = browser.getEnumeration();
while (messagesInQueue.hasMoreElements()) {
Message queueMessage = (Message) messagesInQueue.nextElement();
if (queueMessage instanceof ActiveMQObjectMessage) {
ActiveMQObjectMessage objectMessage = (ActiveMQObjectMessage) queueMessage;
objectMessage.getObject();
}
}
}
我使用了调试模式,ActiveMQObjectMessage将对象设置为null
这种方法好吗?如果是,我做错了什么?
如何从代理接收对象?我认为您使用queuebrowser的方法很好。如果目的只是查看队列上的消息,而不是为其提供UI,那么还可以使用JMX支持,并使用类似jconsole或jvisualvm的工具连接到JMX侦听器
您可能正在不同于使用者或生产者的实例上运行队列浏览器/监视器,这就是您的类对此实例不可用以及objectMessage.getObject()调用失败的原因-它需要类定义才能将序列化对象转换为对象。您可以尝试将类jar放在运行浏览器的实例中,看看是否有效。消费者还在运行吗?他们可能会在尝试查看时从队列中消费/删除吗?我有类定义,它表明这不是问题所在。我使用了JConsole,并用它查看我的消息。
javax.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: MyMessage