2009-08-24 19 views
7

J'espère que quelqu'un pourra m'aider - J'utilise JBoss 5.1 et MQ Series 7 dans une application EJB/JMS. J'ai plusieurs beans pilotés par message dans mon application, chacun écoutant dans une file d'attente de messages MQ Series. Quand une erreur est rencontrée pendant le traitement d'un message, je dois pouvoir configurer un 'délai de retry', de sorte que mq series attende un certain temps avant d'essayer de relancer le message. J'ai passé au peigne fin la documentation de la série MQ, et je n'ai pas encore trouvé le moyen de le faire dans la série MQ. Je sais que le fournisseur JMS par défaut de JBoss a un moyen de le faire, mais je suis actuellement limité à l'utilisation de la série MQ. Comme je n'ai pas été en mesure de définir un délai de réessai - lorsque j'ai un message qui échoue, mon application se coince dans une boucle serrée de livrer le message et de revenir en arrière en continu. Quelqu'un peut-il m'aider à comprendre s'il existe une option de configuration dans MQ Series qui me permettra d'attendre X millisecondes avant de rediffuser un message échoué?Configuration d'un délai de nouvelle tentative dans la série MQ

Répondre

3

Je pense que vous n'avez pas de chance. Autant que je sache, les seuls paramètres que vous pouvez modifier dans ce scénario est le nombre maximum de fois que le message sera réessayé (BOTHRESH) et le nom de la file d'attente exception/annulation (BOQUEUE) où le message sera envoyé si le réessayer tentatives dépasse le max.

Paal

6

Ceci est susceptible d'être l'occasion d'élaborer un peu d'infrastructures pour un tel problème. Puisque vous pouvez regarder JMSDeliveryCount lorsque le message est entré dans le bean (avant de le traiter - considérer la portée de commit) et vous pouvez voir qu'il a déjà eu quelques rollbacks, envoyez le message à un staging file d'attente mais attachez le nom de la file d'attente de destination dans les propriétés jms afin de pouvoir l'utiliser plus tard.

Un processus simple peut fonctionner sur un intervalle pour effacer la file d'attente mise en scène (toutes les 5 minutes par exemple) et envoyer le message à une file d'attente de routage .

Un autre processus peut s'asseoir sur la file d'attente de routage et regarder les propriétés jms (qui a ajouté le nom de la file d'attente de destination) et envoyer le message à la destination orginal.

C'est un courtier de pauvres, mais il atteindra l'objectif. C'est vrai qu'il n'y a pas grand-chose pour vraiment faire ce que vous voulez.

0

Vous pouvez spécifier une limite de réessai afin que l'annulation continue s'arrête après une tentative spécifiée.