Quindi ho un broker ActiveMQ e alcuni produttori che mettono alcuni oggetti autoprodotti nel broker. Ho anche alcuni consumatori che ricevono questi messaggi (oggetti serializzati) senza problemi. Ma voglio creare uno strumento che si connetta al broker e mostri tutti i messaggi (oggetti serializzati).Come posso ottenere tutti i messaggi da un broker ActiveMQ?
ho cercato di farlo usando e 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();
}
}
}
Con questo codice ottengo un'eccezione sulla objectMessage.getObject():
javax.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: MyMessage
Ho usato la modalità di debug e ActiveMQObjectMessage ha l'oggetto impostato su null.
Questo approccio è buono e se sì, cosa sto facendo male? Come posso ricevere l'oggetto anche dal broker?
Il consumatore è ancora in esecuzione? Possono consumare/rimuovere dalla coda mentre cercano di dare un'occhiata? – Dag
no, l'utente non esegue – telebog