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