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个关注朋友微博 ...
随机推荐
- vue3.0学习笔记
vue3转vue2: https://vue-next-template-explorer.netlify.app/ 1. Vue3.0六大两点 Performance:性能比Vue2.x快1.2~2 ...
- OpenSSL测试-SM3
OpenSSL测试-SM3 1.使用OpenSSL的命令计算你的8位学号的摘要值(SM3),提交截图. 运行结果 2.使用OpenSSL编程对计算"你的8位学号"SM3摘要值,提交 ...
- 软件工程日报八——AlertDiatog的使用
今天学习了AlertDiatog的相关内容 AlertDialog可以在当前的界面上显示一个对话框,这个对话框是置顶于所有界面元素之上的,能够屏蔽掉其他控件的交互能力,因此AlertDialog一般是 ...
- IO学习笔记6
2.3 多路复用 但是NIO仍有它的缺陷,因为服务端和客户端都在一个线程中,主线程遍历客户端集合去每一个客户端都问一遍:你有没有数据,这样的话,如果有10K个客户端,只有最后一个客户端才收到了信息,但 ...
- 【转载】 VCS编译的基本参数,//code细节,注释
https://www.bilibili.com/read/cv18255106?spm_id_from=333.999.0.0
- 关键aspNetCore processPath 这一行,耗费了一天
<?xml version="1.0" encoding="UTF-8"?> <configuration> <locatio ...
- windows远程桌面之前用于连接到xxx的凭据无法工作
使用windows远程桌面连接时报错提示: 之前用于连接到xxx的凭据无法工作 确认输入的用户名密码没有问题 解决方法: 打开gpedit.msc组策略管理,依次找到 计算机配置 > windo ...
- uniapp与原生交互
1.项目中引入 DSBridge.js 文件 var bridge = { default: this, call: function(b, a, c) { var e = ""; ...
- scrapy中发送post请求
1.可以使用`yield scrapy.FormRequest(url,formdata,callback)`方法发送POST请求. 其中构造参数formdata可以是字典,也可以是可迭代的(key, ...
- 强烈推荐的elasticsearch集群连接工具: elasticvue
个人感觉非常棒的es-cluster连接工具, 检查状态什么的, 一目了然, 支持中文超方便, 比elasticSearchHead好用多了. 安装方法打开微软浏览器edge-商城搜索-Elastic ...