sessions - No se puede capturar el evento SessionDestroyed en Spring Redis Session+Spring boot environment
spring session management example (0)
Tengo un proyecto de Spring Boot con Spring Session respaldado por Redis. Estoy intentando capturar el evento de sesiónDestroyed para poder realizar una limpieza.
El código para capturar el evento es el siguiente, según la guía que encontré en otro lugar en Stack Overflow.
@Component
public class SessionEndedListener implements ApplicationListener<SessionDestroyedEvent> {
private final Logger LOGGER = LoggerFactory.getLogger(getClass());
@Override
public void onApplicationEvent(SessionDestroyedEvent event) {
LOGGER.info("Destroyed session: {}", event.getSessionId());
}
}
Configuré mi configuración de sesión Redis como tal
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 120)
public class RedisSessionConfig {
}
Puedo ver algunos registros de Spring Redis limpiando las sesiones caducadas cada minuto como se muestra a continuación
2016-07-21 11: 07: 00,026 ==== RedisSessionExpirationPolicy.java ==== thread: pool-4-thread-1 ==== DEBUG> org.springframework.session.data.redis.RedisSessionExpirationPolicy.cleanExpiredSessions ( ) => [] (línea: 107) Las sesiones de limpieza expiran el jueves 21 de julio a las 11:07:00 EDT 2016
Pero el código que está destinado a capturar el SessionDestroyedEvent nunca se llama. ¿Que me estoy perdiendo aqui?
Tenga en cuenta que estoy probando esto con un servidor Redis local donde no hay ningún problema al configurar eventos de espacio clave como Egx.
Cuando depuré el código.
Esta declaración
if(!body.startsWith("spring:session:sessions:")) {
return;
}
en la clase org.springframework.session.data.redis.SessionMessageListener regresa prematuramente antes de tener la oportunidad de publicar el evento
porque el cuerpo variable tiene un valor
/xac/xed/x00/x05t/x00<spring:session:sessions:2392443d-62a9-4f8c-81f0-c0bb446eb16f
Estoy usando spring-session 1.0.2.RELEASE. ¿Hubo un error que se solucionó?