【发布时间】:2011-12-05 05:24:07
【问题描述】:
所以我有一个 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();
}
}
}
使用此代码,我在 objectMessage.getObject() 上遇到异常:
javax.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: MyMessage
我使用了调试模式,ActiveMQObjectMessage 将对象设置为 null。
这种方法好吗?如果是,我做错了什么? 我如何也可以从代理接收对象?
【问题讨论】:
-
消费者还在运行吗?可能他们在尝试查看时消耗/从队列中删除?