场景
Springboot使用Redis作为分布式节点的共享Session, 使用Kafka传输日志到ELK,出现每小时百万条报警,报警日志均为WARN级别,如下:
Session失效监听失败, 报警源码如下:
RedisOperationsSessionRepository
RedisMessageListenerContainer
解决
紧急解决
日志报警撑爆了用于传输日志的Kafka,首先更新logback,新增如下,屏蔽日志,但问题仍在。
Bug修复
相关依赖为最新版本: spring-boot-starter-parent与spring-boot-starter-data-redis为1.5.18.RELEASE,spring-session-data-redis为1.3.4.RELEASE。
查源码(KeyExpirationEventMessageListener)可知, KeyExpirationEventMessageListener重写了父类KeyspaceEventMessageListener的doHandleMessage方法,只需重写KeyspaceEventMessageListener的onMessage方法即可解决问题,如下:
1.新增类KeyExpiredListener
2.RedisConfig类新增RedisMessageListenerContainer、KeyExpiredListener的构建