648540858
2022-01-04 7e428f823128ec5fdbff3a8f73e9ea1f1a4a23ba
修复redis配置功能在redis配置了 notify-keyspace-events时无法强制配置的问题
3个文件已修改
1个文件已添加
88 ■■■■■ 已修改文件
src/main/java/com/genersoft/iot/vmp/conf/RedisKeyExpirationEventMessageListener.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMKeepliveTimeoutListener.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/conf/RedisKeyExpirationEventMessageListener.java
New file
@@ -0,0 +1,41 @@
package com.genersoft.iot.vmp.conf;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.util.StringUtils;
import java.util.Properties;
public class RedisKeyExpirationEventMessageListener extends KeyExpirationEventMessageListener {
    private UserSetup userSetup;
    private RedisMessageListenerContainer listenerContainer;
    private String keyspaceNotificationsConfigParameter = "EA";
    public RedisKeyExpirationEventMessageListener(RedisMessageListenerContainer listenerContainer, UserSetup userSetup) {
        super(listenerContainer);
        this.listenerContainer = listenerContainer;
        this.userSetup = userSetup;
    }
    @Override
    public void init() {
        if (!userSetup.getRedisConfig()) {
            // 配置springboot默认Config为空,即不让应用去修改redis的默认配置,因为Redis服务出于安全会禁用CONFIG命令给远程用户使用
            setKeyspaceNotificationsConfigParameter("");
        }else {
            RedisConnection connection = this.listenerContainer.getConnectionFactory().getConnection();
            Properties config = connection.getConfig("notify-keyspace-events");
            try {
                if (!config.getProperty("notify-keyspace-events").equals(keyspaceNotificationsConfigParameter)) {
                    connection.setConfig("notify-keyspace-events", keyspaceNotificationsConfigParameter);
                }
            } finally {
                connection.close();
            }
        }
        super.init();
    }
}
src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java
@@ -1,5 +1,6 @@
package com.genersoft.iot.vmp.gb28181.event.offline;
import com.genersoft.iot.vmp.conf.RedisKeyExpirationEventMessageListener;
import com.genersoft.iot.vmp.conf.UserSetup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -7,12 +8,16 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.DependsOn;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.stereotype.Component;
import com.genersoft.iot.vmp.common.VideoManagerConstants;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
import org.springframework.util.StringUtils;
import java.util.Properties;
/**    
 * @description:设备心跳超时监听,借助redis过期特性,进行监听,监听到说明设备心跳超时,发送离线事件
@@ -20,7 +25,7 @@
 * @date:   2020年5月6日 上午11:35:46     
 */
@Component
public class KeepaliveTimeoutListenerForPlatform extends KeyExpirationEventMessageListener {
public class KeepaliveTimeoutListenerForPlatform extends RedisKeyExpirationEventMessageListener {
    private Logger logger = LoggerFactory.getLogger(KeepaliveTimeoutListenerForPlatform.class);
@@ -30,17 +35,8 @@
    @Autowired
    private UserSetup userSetup;
    @Override
    public void init() {
        if (!userSetup.getRedisConfig()) {
            // 配置springboot默认Config为空,即不让应用去修改redis的默认配置,因为Redis服务出于安全会禁用CONFIG命令给远程用户使用
            setKeyspaceNotificationsConfigParameter("");
        }
        super.init();
    }
    public KeepaliveTimeoutListenerForPlatform(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    public KeepaliveTimeoutListenerForPlatform(RedisMessageListenerContainer listenerContainer, UserSetup userSetup) {
        super(listenerContainer, userSetup);
    }
src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java
@@ -1,5 +1,6 @@
package com.genersoft.iot.vmp.gb28181.event.offline;
import com.genersoft.iot.vmp.conf.RedisKeyExpirationEventMessageListener;
import com.genersoft.iot.vmp.conf.UserSetup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -20,7 +21,7 @@
 * @date:   2020年5月6日 上午11:35:46     
 */
@Component
public class KeepliveTimeoutListener extends KeyExpirationEventMessageListener {
public class KeepliveTimeoutListener extends RedisKeyExpirationEventMessageListener {
    private Logger logger = LoggerFactory.getLogger(KeepliveTimeoutListener.class);
@@ -29,6 +30,10 @@
    @Autowired
    private UserSetup userSetup;
    public KeepliveTimeoutListener(RedisMessageListenerContainer listenerContainer, UserSetup userSetup) {
        super(listenerContainer, userSetup);
    }
    @Override
    public void init() {
@@ -39,9 +44,6 @@
        super.init();
    }
    public KeepliveTimeoutListener(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }
    /**
     * 监听失效的key,key格式为keeplive_deviceId
src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMKeepliveTimeoutListener.java
@@ -2,6 +2,7 @@
import com.alibaba.fastjson.JSONObject;
import com.genersoft.iot.vmp.common.VideoManagerConstants;
import com.genersoft.iot.vmp.conf.RedisKeyExpirationEventMessageListener;
import com.genersoft.iot.vmp.conf.UserSetup;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
@@ -21,7 +22,7 @@
 * @date:   2020年5月6日 上午11:35:46     
 */
@Component
public class ZLMKeepliveTimeoutListener extends KeyExpirationEventMessageListener {
public class ZLMKeepliveTimeoutListener extends RedisKeyExpirationEventMessageListener {
    private Logger logger = LoggerFactory.getLogger(ZLMKeepliveTimeoutListener.class);
@@ -37,20 +38,12 @@
    @Autowired
    private IMediaServerService mediaServerService;
    @Override
    public void init() {
        if (!userSetup.getRedisConfig()) {
            // 配置springboot默认Config为空,即不让应用去修改redis的默认配置,因为Redis服务出于安全会禁用CONFIG命令给远程用户使用
            setKeyspaceNotificationsConfigParameter("");
        }
        super.init();
    public ZLMKeepliveTimeoutListener(RedisMessageListenerContainer listenerContainer, UserSetup userSetup) {
        super(listenerContainer, userSetup);
    }
    public ZLMKeepliveTimeoutListener(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }
    /**
    /**
     * 监听失效的key,key格式为keeplive_deviceId
     * @param message
     * @param pattern