tel*_*bog 8 activemq-classic jms
所以我有一个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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用此代码,我在objectMessage.getObject()上得到一个异常:
javax.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: MyMessage
Run Code Online (Sandbox Code Playgroud)
我使用了调试模式,ActiveMQObjectMessage将对象设置为null.
这种方法是否良好,如果是,我做错了什么?我怎样才能从经纪人那里收到这个对象?
我认为您使用队列浏览器的方法很好。如果目的只是查看队列上的消息而不为其提供 UI,您还可以使用 JMX 支持 - http://activemq.apache.org/jmx.html并使用 jconsole 或 jvisualvm 等工具连接到 JMX 侦听器。
您可能在与消费者或生产者不同的实例上运行队列浏览器/监视器,这就是为什么您的类不可用于该实例以及 objectMessage.getObject() 调用失败的原因 - 它需要类定义可用于将序列化对象转换为对象。您可以尝试将类 jar 放入运行浏览器的实例中,看看是否有效。
| 归档时间: |
|
| 查看次数: |
11352 次 |
| 最近记录: |