springboot java redis 监听超时事件
package ideal4j.pfa.config.redis; import cn.hutool.core.date.DateTime;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import ideal4j.icity.common.util.DateUtils;
import ideal4j.pfa.common.util.RedisService;
import ideal4j.pfa.pfa.model.OverThresholdAlarm;
import ideal4j.pfa.pfa.service.OverThresholdAlarmService;
import ideal4j.pfa.pfa.service.PassengerFlowAnalysisService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.stereotype.Component;
import java.nio.charset.StandardCharsets; /**
* redis的key过期监听class
* */ @Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener { @Autowired
RedisTemplate<String, String> stringRedisTemplate; @Autowired
private RedisService redisService; @Autowired
OverThresholdAlarmService overThresholdAlarmService; @Autowired
PassengerFlowAnalysisService passengerFlowAnalysisService; private static final Logger logger = LoggerFactory.getLogger(RedisKeyExpirationListener.class); public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
} @Override
public void onMessage(Message message, byte[] pattern) {
try {
String expiredKey = new String(message.getBody(), StandardCharsets.UTF_8);
//发现关于账户锁定的key,那么删掉它
if (expiredKey.indexOf("callback_") != -1) {
OverThresholdAlarm overThresholdAlarm = JSON.parseObject(redisService.get(expiredKey+"_2")+"", OverThresholdAlarm.class);
String uuid = UUID.randomUUID().toString().replace("-", "");
overThresholdAlarm.setId(uuid);
overThresholdAlarmService.insert(overThresholdAlarm);
sendMessage(overThresholdAlarm);
logger.info("redis key:"+expiredKey+"超时,事件已生成!!事件ID:"+uuid);
//删除key
stringRedisTemplate.delete(expiredKey);
stringRedisTemplate.delete(expiredKey+"_2");
}
super.onMessage(message, pattern);
} catch (Exception e) {
logger.error("监听超时redis key时,删除账户锁定key发生了错误!!!", e);
}
} void sendMessage(OverThresholdAlarm overThresholdAlarm){
//告警列表websocket 推送
JSONObject websocketJson = new JSONObject();
websocketJson.put("equipmentId",overThresholdAlarm.getEquipmentId());
websocketJson.put("id",overThresholdAlarm.getId());
websocketJson.put("equipmentName",overThresholdAlarm.getEquipmentName());
websocketJson.put("desc","人员排队告警");
websocketJson.put("alarmTime", DateUtils.printJdkDate(new DateTime(),DateUtils.PATTERN_OF_DATE_TIME_EN));
websocketJson.put("currentPersonsNumber", overThresholdAlarm.getCurrentPersonsNumber());
websocketJson.put("deptId", overThresholdAlarm.getBelongDeptId());
passengerFlowAnalysisService.calculationNowLineupNumberNew(websocketJson);
} }
springboot java redis 监听超时事件的更多相关文章
- [JS]笔记12之事件机制--事件冒泡和捕获--事件监听--阻止事件传播
-->事件冒泡和捕获-->事件监听-->阻止事件传播 一.事件冒泡和捕获 1.概念:当给子元素和父元素定义了相同的事件,比如都定义了onclick事件,点击子元素时,父元素的oncl ...
- JS 中的事件绑定、事件监听、事件委托
事件绑定 要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数.所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称. 在JavaScript中,有 ...
- javascript事件监听与事件委托
事件监听与事件委托 在js中,常用到element.addEventListener()来进行事件的监听.但是当页面中存在大量需要绑定事件的元素时,这种方式可能会带来性能影响.此时,我们可以用事件 ...
- 在Javascript中监听flash事件(转)
在Javascript中监听flash事件,其实有两种做法: 1.在特定的环境下(例如专门制作的flash),大家约定一个全局函数,然后在flash的事件中用ExternalInterface.cal ...
- Fragment中监听onKey事件,没你想象的那么难。
项目中越来越多的用到Fragment,在用Fragment取代TabHost的时候遇到了一个问题,我们都知道,TabHost的Tab为Activity实例,有OnKey事件,但是Fragment中没有 ...
- js 事件监听 冒泡事件
js 事件监听 冒泡事件 的取消 [自己写框架时,才有可能用到] <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitiona ...
- 原 JS监听回车事件
原 JS监听回车事件 发表于2年前(2014-06-04 10:16) 阅读(6101) | 评论(0) 11人收藏此文章, 我要收藏 赞0 1月16日厦门 OSC 源创会火热报名中,奖品多多哦 ...
- Android EditText截获与监听输入事件
Android EditText截获与监听输入事件共有2种方法: 1.第一种方法:使用setOnKeyListener(),不过这种方式只能监听硬键盘事件. edittext.setOnKeyLi ...
- 两种js监听滚轮事件的方式
前段时间在写前端的时候,需要监听浏览器的滚轮事件 网上查了一下,找到两种监听滚轮事件的方法: 一.原生js通过window.onscroll监听 //window.onscroll = functio ...
- Java线程监听,意外退出线程后自动重启
Java线程监听,意外退出线程后自动重启 某日,天朗气清,回公司,未到9点,刷微博,顿觉问题泛滥,惊恐万分! 前一天写了一个微博爬行程序,主要工作原理就是每隔2分钟爬行一次微博,获取某N个关注朋友微博 ...
随机推荐
- 链接mysql数据库报错:2003-cant connect to Mysql server on ‘localhost’(10038)
今天用navicat连mysql时候突然报错了 我百度了一下,知道了是mysql服务没开,但是我打开了服务,发现服务里面没有mysql,于是就去cmd以管理员身份打开命令提示符,切换到安装mysql的 ...
- containerd容器存储探究
ContainerD 容器目录结构探究 启动容器 作为开始,我们需要去启动一个容器. 你可以通过命令行的方式来启动一个容器,例如: ctr i pull docker.io/library/nginx ...
- 【uboot 】uboot通过tftp下载内核
1.开发板uboot,虚拟机能相互ping通 2.ubuntu搭建好tftp服务器,设置好文件夹,放置好文件 sudo apt install tftpd-hpa //安装服务程序 sudo sys ...
- (0319) SV 中的 iff 事件控制
https://blog.csdn.net/yinyeyy/article/details/111086864
- [转并修改]C#编程中跨线程访问控件
C#编程中跨线程访问控件 一.简述 二.Winforms中跨线程访问控件 三.WPF中跨线程访问控件 参考文档 一.简述 C#中不允许跨线程直接访问界面控件,即一个线程中如主线程创建的控件不允许被其他 ...
- Wix Setting language and code page attributes
When you localize your MSI package, you'll need to alter your Productand Package elements to suit. T ...
- BUUCTF-[极客大挑战 2019]Http
一道考察http请求头X-Forwarded-For字段和Referer字段User-Agent字段的题目 一.基础知识 X-Forwarded-For(XFF)又名XFF头 1)概述:X-Forwa ...
- iOS证书签名
苹果官方有一对密钥,即私钥和公钥,私钥在苹果后台,公钥在iOS系统中(如iPhone手机在出厂后,其中就保存有苹果官方的公钥):在Mac系统打包app时也会生成一对密钥(私钥.公钥),并保存在钥匙串中 ...
- ONOS中新建分支并关联远程库
新建分支并关联远程库 廖雪峰学习git教程网站:(多人协作) https://www.liaoxuefeng.com/wiki/896043488029600/900375748016320 git远 ...
- Java基于ssm师生实验课-实验室-实验设备预约系统源码
简介 java+ssm开发的实验课实验设备实验室预约系统,老师可预约实验设备和实验室,然后发布实验课和上传实验附件.学生可以报名实验课,也可以自己预约实验室(部分实验室对学生开放)做实验.学生做完实验 ...