Jms 如何从ActiveMQ代理获取所有消息?

Jms 如何从ActiveMQ代理获取所有消息?,jms,activemq,Jms,Activemq,所以我有一个ActiveMQ代理和一些生产者,他们在代理中放置一些自制的对象。我还有一些消费者可以毫无问题地接收这些消息(序列化对象)。但是我想创建一个连接到代理并显示所有消息(序列化对象)的工具 我尝试使用和ActiveMQConnection执行此操作: Set<ActiveMQQueue> currentMessageQueues = activeMQConnection.getDestinationSource().getQueues(); Iterator<Activ

所以我有一个ActiveMQ代理和一些生产者,他们在代理中放置一些自制的对象。我还有一些消费者可以毫无问题地接收这些消息(序列化对象)。但是我想创建一个连接到代理并显示所有消息(序列化对象)的工具

我尝试使用和ActiveMQConnection执行此操作:

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