package com.ruoyi.web.controller.service;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.redis.connection.Message;
|
import org.springframework.data.redis.connection.MessageListener;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.PostConstruct;
|
|
/**
|
* Redis 过期键监听器
|
* 监听 visitor:expire:* 类型的 Key 过期事件
|
*/
|
@Component
|
@Slf4j
|
public class VisitorExpireListener implements MessageListener {
|
|
@Autowired
|
private SysVisitorRecordService visitorRecordService;
|
|
@Override
|
public void onMessage(Message message, byte[] pattern) {
|
try {
|
// 获取过期的 Key
|
String expiredKey = new String(message.getBody());
|
log.info("收到Redis过期事件,Key:{}", expiredKey);
|
|
// 判断是否为访客过期 Key
|
if (expiredKey != null && expiredKey.startsWith("visitor:expire:")) {
|
// 解析记录ID
|
String recordIdStr = expiredKey.substring("visitor:expire:".length());
|
Long recordId = Long.parseLong(recordIdStr);
|
|
log.info("访客记录 {} 有效期已到,开始自动签离", recordId);
|
|
// 执行自动签离
|
visitorRecordService.autoSignOutByRecordId(recordId);
|
}
|
} catch (Exception e) {
|
log.error("Redis过期事件处理失败", e);
|
}
|
}
|
}
|