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 监听超时事件的更多相关文章

  1. [JS]笔记12之事件机制--事件冒泡和捕获--事件监听--阻止事件传播

    -->事件冒泡和捕获-->事件监听-->阻止事件传播 一.事件冒泡和捕获 1.概念:当给子元素和父元素定义了相同的事件,比如都定义了onclick事件,点击子元素时,父元素的oncl ...

  2. JS 中的事件绑定、事件监听、事件委托

    事件绑定 要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数.所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称. 在JavaScript中,有 ...

  3. javascript事件监听与事件委托

      事件监听与事件委托 在js中,常用到element.addEventListener()来进行事件的监听.但是当页面中存在大量需要绑定事件的元素时,这种方式可能会带来性能影响.此时,我们可以用事件 ...

  4. 在Javascript中监听flash事件(转)

    在Javascript中监听flash事件,其实有两种做法: 1.在特定的环境下(例如专门制作的flash),大家约定一个全局函数,然后在flash的事件中用ExternalInterface.cal ...

  5. Fragment中监听onKey事件,没你想象的那么难。

    项目中越来越多的用到Fragment,在用Fragment取代TabHost的时候遇到了一个问题,我们都知道,TabHost的Tab为Activity实例,有OnKey事件,但是Fragment中没有 ...

  6. js 事件监听 冒泡事件

    js 事件监听  冒泡事件   的取消 [自己写框架时,才有可能用到] <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitiona ...

  7. 原 JS监听回车事件

    原 JS监听回车事件 发表于2年前(2014-06-04 10:16)   阅读(6101) | 评论(0) 11人收藏此文章, 我要收藏 赞0 1月16日厦门 OSC 源创会火热报名中,奖品多多哦  ...

  8. Android EditText截获与监听输入事件

      Android EditText截获与监听输入事件共有2种方法: 1.第一种方法:使用setOnKeyListener(),不过这种方式只能监听硬键盘事件. edittext.setOnKeyLi ...

  9. 两种js监听滚轮事件的方式

    前段时间在写前端的时候,需要监听浏览器的滚轮事件 网上查了一下,找到两种监听滚轮事件的方法: 一.原生js通过window.onscroll监听 //window.onscroll = functio ...

  10. Java线程监听,意外退出线程后自动重启

    Java线程监听,意外退出线程后自动重启 某日,天朗气清,回公司,未到9点,刷微博,顿觉问题泛滥,惊恐万分! 前一天写了一个微博爬行程序,主要工作原理就是每隔2分钟爬行一次微博,获取某N个关注朋友微博 ...

随机推荐

  1. 错误提示“com.alibaba.fastjson.JSONException: exepct '[', but string, pos 4, json”解决

    1.错误提示信息如下: com.alibaba.fastjson.JSONException: exepct '[', but string, pos 4, json : "[{" ...

  2. Excel VBA实例

    有个朋友让帮忙看下excel数据怎么处理,初步一看有点复杂,难以下手.进一步分析.搜索,发现VBA可以很好地解决这个问题,总结记录一下. 问题描述:如下图,有N个sheet,每个sheet记录了一个公 ...

  3. NXOpen拉伸

    #include <NXOpen/Annotations.hxx> #include <NXOpen/Assemblies_Component.hxx> #include &l ...

  4. docker-compose重新启动单个容器

    这很简单:使用命令: docker-compose restart worker 您可以设置在杀死容器之前等待停止的时间(以秒为单位) docker-compose restart -t 30 wor ...

  5. Ubuntu之切换root用户提示认证失败

    出现认证失败(Authentication failure)的原因有两种,要么是密码输入错误,要么是新安装的系统还没有给root设置密码,,如果是后者,可以通过命令sudo passwd root进行 ...

  6. ES6-Promise下

    六.实例的finally方法: promise状态发生变化指的是由初始态变成成功或者失败态 处理错误指的是没有调用catch(失败态实例调用可以执行其回调的then) finally里面的回调函数只要 ...

  7. a菜单点击标红,其他标黑代码

    <script> let aList = document.querySelectorAll('a'); console.log(aList); for (let index = 0; i ...

  8. unity ScriptObject使用

    转自 https://www.jianshu.com/p/77fabc83555b using UnityEngine; [CreateAssetMenu(fileName = "Untit ...

  9. Markdown中如何让# * >等符号原样显示,不转义解析成对应Markdown语法

    加\转义: * markdown 中如果遇到有字符与原有语法冲突, 可以使用反引号"`"包裹需要转移的内容. * 反引号位于键盘左上角Esc下面的位置 示例: # * > 原 ...

  10. iphone tabbar问题

    适配新款苹果底部tabbar,网上找了代码,不能用.翻出苹果各型号尺寸发现找的代码稍微有点问题.自己改了下. 关键的判断在于window.screen.height > 800这是区分带tabb ...