Ma demande est en cours d'exécution sur Jboss 7.1.1. J'ai un planificateur qui s'exécute toutes les minutes et doit vérifier s'il y a des messages dans le DLQ et faire quelques mises à jour dans la base de données.MessageConsumer ne consomme pas les messages
J'ai écrit un consommateur de message qui écoute un DLQ personnalisé prédéfini. Le problème est que je peux voir qu'il y a des messages dans le DLQ personnalisé, mais consumer.receiveNoWait()
retourne toujours null.
Voici le code pour créer le consommateur:
/*this is running fine and creating the consumer*/
public DestinationHandlerImpl(ConnectionFactory connectionFactory,
Destination destination, boolean useTransaction, int delMode,
boolean isProducer) throws JMSException {
connection = connectionFactory.createConnection();
consumer = session.createConsumer(destination);
}
Voici le code qui consomme le message (exécute toutes les minutes):
/*this always return null, event when there are messages in the queue*/
public <T extends BaseEvent> T recieveMessage()
throws JMSException {
Message message = consumer.receiveNoWait(); // ----> always return null!!!
if (message != null && !(message instanceof ObjectMessage)) {
throw new IllegalArgumentException(
"message object has to be of type ObjectMessage");
}
// Extract the object from the message
return message == null ? null : (T) ((ObjectMessage) message).getObject();
}
Je l'ai utilisé le mode de débogage et i peut voir la propriété de destination du consommateur est mis à la bonne file d'attente, alors qu'est-ce que je fais mal?
Je pense que vous ne voulez pas continuer à appeler '' chaque minute start(), mais vous devez appeler qu'une fois lorsque vous ouvrez la connexion. – seh
Je m'assure de fermer la connexion chaque fois que le planificateur démarre. – Tomer
Puis-je demander pourquoi? Êtes-vous concerné par la consommation de ressources de la connexion ouverte? – seh