From 7e428f823128ec5fdbff3a8f73e9ea1f1a4a23ba Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期二, 04 一月 2022 19:40:01 +0800
Subject: [PATCH] 修复redis配置功能在redis配置了 notify-keyspace-events时无法强制配置的问题

---
 src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java             |   10 +++--
 src/main/java/com/genersoft/iot/vmp/conf/RedisKeyExpirationEventMessageListener.java               |   41 ++++++++++++++++++++
 src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMKeepliveTimeoutListener.java                |   17 ++------
 src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java |   20 ++++------
 4 files changed, 60 insertions(+), 28 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/conf/RedisKeyExpirationEventMessageListener.java b/src/main/java/com/genersoft/iot/vmp/conf/RedisKeyExpirationEventMessageListener.java
new file mode 100644
index 0000000..a2281ab
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/conf/RedisKeyExpirationEventMessageListener.java
@@ -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涓虹┖锛屽嵆涓嶈搴旂敤鍘讳慨鏀箁edis鐨勯粯璁ら厤缃紝鍥犱负Redis鏈嶅姟鍑轰簬瀹夊叏浼氱鐢–ONFIG鍛戒护缁欒繙绋嬬敤鎴蜂娇鐢�
+            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();
+    }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java
index 8bbf03e..937e555 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java
+++ b/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涓虹┖锛屽嵆涓嶈搴旂敤鍘讳慨鏀箁edis鐨勯粯璁ら厤缃紝鍥犱负Redis鏈嶅姟鍑轰簬瀹夊叏浼氱鐢–ONFIG鍛戒护缁欒繙绋嬬敤鎴蜂娇鐢�
-            setKeyspaceNotificationsConfigParameter("");
-        }
-        super.init();
-    }
-
-    public KeepaliveTimeoutListenerForPlatform(RedisMessageListenerContainer listenerContainer) {
-        super(listenerContainer);
+    public KeepaliveTimeoutListenerForPlatform(RedisMessageListenerContainer listenerContainer, UserSetup userSetup) {
+        super(listenerContainer, userSetup);
     }
 
 
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java
index 7b3cb58..151b68d 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java
+++ b/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);
-	}
 
 	/**
      * 鐩戝惉澶辨晥鐨刱ey锛宬ey鏍煎紡涓簁eeplive_deviceId
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMKeepliveTimeoutListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMKeepliveTimeoutListener.java
index 3fc6a3c..16d8da7 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMKeepliveTimeoutListener.java
+++ b/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涓虹┖锛屽嵆涓嶈搴旂敤鍘讳慨鏀箁edis鐨勯粯璁ら厤缃紝鍥犱负Redis鏈嶅姟鍑轰簬瀹夊叏浼氱鐢–ONFIG鍛戒护缁欒繙绋嬬敤鎴蜂娇鐢�
-            setKeyspaceNotificationsConfigParameter("");
-        }
-        super.init();
+    public ZLMKeepliveTimeoutListener(RedisMessageListenerContainer listenerContainer, UserSetup userSetup) {
+        super(listenerContainer, userSetup);
     }
 
-	public ZLMKeepliveTimeoutListener(RedisMessageListenerContainer listenerContainer) {
-		super(listenerContainer);
-	}
 
-	/**
+    /**
      * 鐩戝惉澶辨晥鐨刱ey锛宬ey鏍煎紡涓簁eeplive_deviceId
      * @param message
      * @param pattern

--
Gitblit v1.8.0