Domanda

Ho un gestore di messaggi, che consuma da una coda JMS e che invia risultati a un'altra coda JMS. Il gestore messaggi risiede in Spring DefaultMessageListenerContainer. Quando il contenitore si spegne, vorrei che finisse di gestire qualsiasi richiesta già consumata e di inviare i risultati. Allo stesso tempo, non dovrebbe più consumare nuovi messaggi dalla coda delle richieste.

Al momento, senza disposizioni speciali di arresto sicuro ApplicationContext.registerShutdownHook (), il contenitore attende la restituzione di eventuali invocazioni listernerMethod in sospeso, ma non sta inviando i risultati alla coda di risposta.

Quale sarebbe l'approccio appropriato per assicurarsi che le risposte prodotte dai gestori in esecuzione vengano inviate alla coda di risposta?

È stato utile?

Soluzione

Penso che la strada da percorrere debba essere tramite l'interfaccia DisposableBean o l'annotazione @PreDestroy . La cosa fondamentale che IMHO non è lasciare che Spring spenga il DMLC, ma piuttosto lasciare che ciò venga fatto da un componente che è a conoscenza dei messaggi attualmente "all'interno del sistema". In questo modo si interrompe l'ascolto di nuovi messaggi mentre si attende il completamento dei messaggi correntemente processati.

L'utilizzo dell'attributo dipende da nelle dichiarazioni dei bean consente inoltre di definire l'ordine dei bean da chiudere. Maggiori informazioni al riguardo nel Riferimento primaverile documentazione .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top