Comment puis-je obtenir tous les messages d'un courtier ActiveMQ?
J'ai donc un courtier ActiveMQ et certains producteurs qui met de l'auto fait des objets dans le courtier. J'ai aussi des consommateurs qui reçoivent ces messages(d'objets sérialisés) sans problème. Mais je veux créer un outil qui se connecte au courtier et affiche tous les messages (d'objets sérialisés).
J'ai essayé de le faire à l'aide et 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();
}
}
}
Avec ce code j'obtiens une exception sur objectMessage.getObject():
javax.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: MyMessage
J'ai utilisé le mode debug et ActiveMQObjectMessage a l'ensemble de l'objet à null.
Cette approche est la bonne et Si oui, ce que je fais de mal?
Comment puis-je également recevoir l'objet à partir du courtier?
Sont les consommateurs toujours en cours d'exécution? Maye qu'ils consomment/supprimer de la file d'attente tout en essayant de prendre un coup d'oeil?
non, le consommateur ne fonctionnent pas
non, le consommateur ne fonctionnent pas
OriginalL'auteur telebog | 2011-10-11
Vous devez vous connecter pour publier un commentaire.
Je pense que votre approche de l'utilisation d'un queuebrowser est bon. Si le but est simplement d'afficher les messages dans la file d'attente et de ne pas fournir une INTERFACE utilisateur, vous pouvez également utiliser le support JMX - http://activemq.apache.org/jmx.html et d'utiliser un outil comme jconsole ou jvisualvm pour se connecter à la JMX auditeur.
Vous êtes probablement en cours d'exécution de votre file d'attente de navigateur/moniteur sur une instance différente de vos consommateurs ou des producteurs, c'est la raison pour laquelle vos classes ne sont pas disponibles à cette instance et pourquoi le objectMessage.appel getObject() échoue - il aurait besoin de la définition de classe pour être disponible pour transformer l'objet sérialisé dans un objet. Vous pouvez essayer de mettre la classe en petits pots dans le cas où vous exécutez votre navigateur et de voir si cela fonctionne.
OriginalL'auteur Biju Kunjummen