Question

J'ai un gestionnaire de messages qui utilise une file d'attente JMS et envoie les résultats à une autre file d'attente JMS. Le gestionnaire de messages réside dans un Spring DefaultMessageListenerContainer. Lorsque le conteneur s'arrête, j'aimerais qu'il finisse de traiter toutes les demandes qu'il a déjà consommées et envoie les résultats. En même temps, il ne devrait plus consommer aucun nouveau message de la file d'attente des demandes.

À l'heure actuelle, ApplicationContext.registerShutdownHook () () n'étant pas doté de dispositions spéciales d'arrêt, le conteneur attend le retour des invocations listernerMethod en attente, mais n'envoie pas les résultats à la file d'attente des réponses.

Quelle serait l'approche appropriée pour vous assurer que les réponses générées par les gestionnaires en cours d'exécution sont envoyées dans la file d'attente des réponses?

Était-ce utile?

La solution

Je pense que le chemin à parcourir doit être conduit via l'interface DisposableBean ou l'annotation @PreDestroy . L’important, à mon humble avis, n’est pas de laisser Spring fermer le DMLC, mais plutôt de le faire par un composant qui est au courant des messages actuellement "dans le système". De cette façon, vous arrêtez d'écouter les nouveaux messages en attendant que les messages en cours de traitement soient terminés.

L'utilisation de l'attribut dépend de dans les déclarations de beans, vous pouvez également définir l'ordre d'arrêt des beans. Plus de détails en rouge dans le Référence de printemps documentation .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top