Question

J'ai un seul auditeur de message fileté qui écoute les messages reçus messages.Système entrants sont persisté dans une base de données car ils sont recieved.

Il y a un message A et message associé B il suit avec une référence it.In Certains occurences Odd, B arrive avant A. Or, dans ce cas, il doit y avoir 3retries après quelques « x » intervalles égaux pour voir si un est arrivé et puis l'association persiste.

En tant que l'auditeur de message est seul thread si l'on met le fil à dormir tout le système serait affecté. Donc, il doit y avoir une nouvelle tentative de thread séparé.

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

  1. Planifier un travail en quartz pour 3 fois et garder la 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.

peut être utilisé quartz uniquement pour des tâches répétitives et ne pas avoir une durée d'information de l'État à travers l'emploi ou est-il une autre meilleure façon de le faire.

Était-ce utile?

La solution

Vous devez configurer votre fournisseur JMS pour régler le délai de relivraison sur votre file d'attente de messages. Dans votre code, vous appelez context.setRollbackOnly pour annuler un message qui ne passe pas vérifier les conditions préalables.

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

  • consommer « B », condition sine qua non pour vérifier et détecter un manque
  • rouleau avant l'opération et le rendement de message à la file d'attente, il sera livré ré-après le retard configuré
  • consommer et traiter le message suivant "A"
  • après le délai, les BMD et les processus consume à nouveau « B » avec succès
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top