Pregunta

Tengo un manejador de mensajes, que consume de una cola JMS y que envía resultados a otra cola JMS. El manejador de mensajes vive en un Spring DefaultMessageListenerContainer. Cuando el contenedor se apaga, me gustaría que termine de manejar cualquier solicitud que ya haya consumido y envíe los resultados. Al mismo tiempo, ya no debería consumir ningún mensaje nuevo de la cola de solicitudes.

En este momento, sin disposiciones especiales de apagado seguras ApplicationContext.registerShutdownHook (), el contenedor espera a que se devuelvan las invocaciones de listernerMethod pendientes, pero no envía los resultados a la cola de respuesta.

¿Cuál sería el enfoque apropiado para asegurarse de que las respuestas producidas por los controladores en ejecución se envíen a la cola de respuestas?

¿Fue útil?

Solución

Creo que el camino a seguir debe ser a través de la interfaz DisposableBean o la anotación @PreDestroy . La clave en mi humilde opinión es no dejar que Spring apague el DMLC, sino que lo haga un componente que esté al tanto de los mensajes que actualmente se encuentran dentro del sistema. De esta manera, deja de escuchar mensajes nuevos mientras espera que finalicen los mensajes procesados ??actualmente.

Usando el atributo depende de en las declaraciones de bean, también puede definir el orden de los beans que se cerrarán. Lea más sobre esto en el Referencia de primavera documentación .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top