|
|
@@ -14,6 +14,7 @@ import com.genersoft.iot.vmp.media.zlm.ZLMMediaListManager;
|
|
|
import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
|
|
|
import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
|
|
|
import com.genersoft.iot.vmp.service.IStreamPushService;
|
|
|
+import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
|
|
|
import com.genersoft.iot.vmp.service.bean.PushStreamStatusChangeFromRedisDto;
|
|
|
import com.genersoft.iot.vmp.service.bean.StreamPushItemFromRedis;
|
|
|
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
|
|
|
@@ -21,14 +22,17 @@ import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
import org.springframework.boot.ApplicationArguments;
|
|
|
import org.springframework.boot.ApplicationRunner;
|
|
|
import org.springframework.data.redis.connection.Message;
|
|
|
import org.springframework.data.redis.connection.MessageListener;
|
|
|
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
+import java.util.concurrent.ConcurrentLinkedQueue;
|
|
|
|
|
|
|
|
|
/**
|
|
|
@@ -40,6 +44,8 @@ public class RedisPushStreamStatusMsgListener implements MessageListener, Applic
|
|
|
|
|
|
private final static Logger logger = LoggerFactory.getLogger(RedisPushStreamStatusMsgListener.class);
|
|
|
|
|
|
+ private boolean taskQueueHandlerRun = false;
|
|
|
+
|
|
|
@Autowired
|
|
|
private IRedisCatchStorage redisCatchStorage;
|
|
|
|
|
|
@@ -47,39 +53,51 @@ public class RedisPushStreamStatusMsgListener implements MessageListener, Applic
|
|
|
private IStreamPushService streamPushService;
|
|
|
|
|
|
@Autowired
|
|
|
- private EventPublisher eventPublisher;
|
|
|
+ private DynamicTask dynamicTask;
|
|
|
|
|
|
- @Autowired
|
|
|
- private UserSetting userSetting;
|
|
|
|
|
|
+
|
|
|
+ private final ConcurrentLinkedQueue<Message> taskQueue = new ConcurrentLinkedQueue<>();
|
|
|
+
|
|
|
+ @Qualifier("taskExecutor")
|
|
|
@Autowired
|
|
|
- private DynamicTask dynamicTask;
|
|
|
+ private ThreadPoolTaskExecutor taskExecutor;
|
|
|
|
|
|
@Override
|
|
|
public void onMessage(Message message, byte[] bytes) {
|
|
|
// TODO 增加队列
|
|
|
logger.warn("[REDIS 消息-推流设备状态变化]: {}", new String(message.getBody()));
|
|
|
- //
|
|
|
- PushStreamStatusChangeFromRedisDto statusChangeFromPushStream = JSON.parseObject(message.getBody(), PushStreamStatusChangeFromRedisDto.class);
|
|
|
- if (statusChangeFromPushStream == null) {
|
|
|
- logger.warn("[REDIS 消息]推流设备状态变化消息解析失败");
|
|
|
- return;
|
|
|
- }
|
|
|
- // 取消定时任务
|
|
|
- dynamicTask.stop(VideoManagerConstants.VM_MSG_GET_ALL_ONLINE_REQUESTED);
|
|
|
- if (statusChangeFromPushStream.isSetAllOffline()) {
|
|
|
- // 所有设备离线
|
|
|
- streamPushService.allStreamOffline();
|
|
|
- }
|
|
|
- if (statusChangeFromPushStream.getOfflineStreams() != null
|
|
|
- && statusChangeFromPushStream.getOfflineStreams().size() > 0) {
|
|
|
- // 更新部分设备离线
|
|
|
- streamPushService.offline(statusChangeFromPushStream.getOfflineStreams());
|
|
|
- }
|
|
|
- if (statusChangeFromPushStream.getOnlineStreams() != null &&
|
|
|
- statusChangeFromPushStream.getOnlineStreams().size() > 0) {
|
|
|
- // 更新部分设备上线
|
|
|
- streamPushService.online(statusChangeFromPushStream.getOnlineStreams());
|
|
|
+ taskQueue.offer(message);
|
|
|
+
|
|
|
+ if (!taskQueueHandlerRun) {
|
|
|
+ taskQueueHandlerRun = true;
|
|
|
+ taskExecutor.execute(() -> {
|
|
|
+ while (!taskQueue.isEmpty()) {
|
|
|
+ Message msg = taskQueue.poll();
|
|
|
+ PushStreamStatusChangeFromRedisDto statusChangeFromPushStream = JSON.parseObject(msg.getBody(), PushStreamStatusChangeFromRedisDto.class);
|
|
|
+ if (statusChangeFromPushStream == null) {
|
|
|
+ logger.warn("[REDIS 消息]推流设备状态变化消息解析失败");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 取消定时任务
|
|
|
+ dynamicTask.stop(VideoManagerConstants.VM_MSG_GET_ALL_ONLINE_REQUESTED);
|
|
|
+ if (statusChangeFromPushStream.isSetAllOffline()) {
|
|
|
+ // 所有设备离线
|
|
|
+ streamPushService.allStreamOffline();
|
|
|
+ }
|
|
|
+ if (statusChangeFromPushStream.getOfflineStreams() != null
|
|
|
+ && statusChangeFromPushStream.getOfflineStreams().size() > 0) {
|
|
|
+ // 更新部分设备离线
|
|
|
+ streamPushService.offline(statusChangeFromPushStream.getOfflineStreams());
|
|
|
+ }
|
|
|
+ if (statusChangeFromPushStream.getOnlineStreams() != null &&
|
|
|
+ statusChangeFromPushStream.getOnlineStreams().size() > 0) {
|
|
|
+ // 更新部分设备上线
|
|
|
+ streamPushService.online(statusChangeFromPushStream.getOnlineStreams());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ taskQueueHandlerRun = false;
|
|
|
+ });
|
|
|
}
|
|
|
}
|
|
|
|