2010-09-23 9 views
1

J'ai un écouteur de message unique qui écoute les messages entrants. Les messages reçus sont conservés dans une base de données à mesure qu'ils sont reçus.Nouvel essai programmé pour un message JMS associé

Il y a un message A et le message associé B le suit avec une référence. Dans certaines occurrences bizarres, B arrive avant A. Maintenant dans ce cas, il doit y avoir 3retries après quelques 'x' intervalles égaux pour voir si Un est arrivé et persiste ensuite l'association. Comme l'écouteur de message est un thread unique si nous mettons le thread en veille, tout le système serait affecté. Il doit donc y avoir une nouvelle tentative de thread.

Peut-on utiliser le Planificateur de quartz d'emploi à cet effet pour éviter le traitement des problèmes de multithreading et d'avoir un magasin PERSISTENT de l'une des 2 façons suivantes,

  1. Planifier un emploi en quartz pour 3 fois et garder trace d'un drapeau dans le JobDataMap pour vérifier si les tentatives précédentes Succeeds reviennent alors sans rien faire

OU

2.Schedule un emploi à un nouvel essai et si la nouvelle tentative échoue programmer le même travail après quelques secondes.

Le quartz peut-il être utilisé uniquement pour des tâches répétitives et ne pas avoir d'informations d'état sur l'ensemble du travail ou existe-t-il un autre moyen de le faire.

Répondre

0

Vous devez configurer votre fournisseur JMS pour définir le délai de remise dans votre file d'attente de messages. Dans votre code, vous appelez context.setRollbackOnly pour abandonner un message qui ne passe pas la vérification des prérequis.

Dans ce cas, le scénario d'exécution de code devient:

  • consomment « B », vérifiez préalable et détecter un manque
  • rouleau la transaction et le message revient à la file d'attente, il sera être à nouveau remis après le délai configuré
  • et processus suivant consomment un message « A »
  • après le délai, le MDB consomme et processus à nouveau « B » avec succès
+0

Nous avons implémenté une solution à base de planificateur à quartz mais nous ne l'avons pas envisagée. Cela aurait été une meilleure approche en le marquant comme une réponse – Yeshvanthni