ard-work/src/main/java/com/ruoyi/alarm/config/AsyncConfiguration.java
@@ -71,4 +71,25 @@ executor.initialize(); return executor; } @Bean("guideExecutor") public Executor guideExecutor(){ ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); //配置核心线程数 executor.setCorePoolSize(corePoolSize); //配置最大线程数 executor.setMaxPoolSize(maxPoolSize); //配置队列大小 executor.setQueueCapacity(queueCapacity); //线程的名称前缀 executor.setThreadNamePrefix("guideExecutor-"); //线程活跃时间(秒) executor.setKeepAliveSeconds(keepAliveSeconds); //等待所有任务结束后再关闭线程池 executor.setWaitForTasksToCompleteOnShutdown(true); //设置拒绝策略 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); //执行初始化 executor.initialize(); return executor; } } ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueHandler.java
@@ -71,9 +71,9 @@ // newThread.start(); //} } @Async @Async("guideExecutor") public void process(String cameraId) { log.debug("CameraId:【" + cameraId + "】队列处理器启动"); log.debug("CameraId:【" + cameraId + "】引导队列处理器启动成功"); PriorityBlockingQueue<GuideTask> guideTasks = GuidePriorityQueue.cameraQueueMap.get(cameraId); while (true) { if (guideTasks.size() > 0) { ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java
@@ -113,7 +113,7 @@ if (client.isConnected()) { client.subscribe(topic, qos); log.info("mqtt连接成功" ); log.info("--订阅主题::" + Arrays.toString(topic)); log.info("订阅主题:" + Arrays.toString(topic)); } else { log.info("mqtt连接失败"); } ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java
@@ -217,7 +217,14 @@ ardChannelService.insertArdChannel(channel); } //配置到流媒体 for (int i = 1; i < m_stDeviceInfo.byChanNum + 1; i++) { addVtdu(camera); //创建引导队列 createGuideQueue(camera); } //添加到流媒体 private void addVtdu(ArdCameras camera) { for (int i = 1; i < camera.getChanNum() + 1; i++) { String name = camera.getId() + "_" + i; String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/cam/realmonitor?channel=" + i + "&subtype=0"; Vtdu vtdu = vtduService.selectVtduByName(name); @@ -243,16 +250,20 @@ vtdu.setCameraId(camera.getId()); vtduService.insertVtdu(vtdu); } } //创建引导队列 if (camera.getCamAlarmGuideEnable() == 1) { if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator); GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); //创建引导队列 private void createGuideQueue(ArdCameras camera) { if (camera.getCamAlarmGuideEnable() != null) { if (camera.getCamAlarmGuideEnable() == 1) { if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator); GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); //启动队列处理器 queueHandler.process(camera.getId()); } } //启动队列处理器 queueHandler.process(camera.getId()); } } ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
@@ -57,6 +57,7 @@ @Resource private QueueHandler queueHandler; public Object _lock=new Object(); public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK; private static HCNetSDK.FExceptionCallBack fExceptionCallBack;//异常回调 @@ -180,7 +181,6 @@ @Async("loginExecutor") public void asyncLogin(ArdCameras camera) { try { Thread.sleep(100); // 初始化 if (!hCNetSDK.NET_DVR_Init()) { log.error("SDK初始化失败"); @@ -230,17 +230,18 @@ } log.debug("Login Success 【 " + camera.getIp() + ":" + camera.getPort() + " 】"); if (fExceptionCallBack == null) { fExceptionCallBack = new ExceptionCallBack();//异常回调 //设置异常回调函数(可在回调函数中获取设备上下线状态等) if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) { log.debug("Set fExceptionCallBack function fail"); return; } else { log.debug("Set fExceptionCallBack function successfully!"); synchronized (_lock) { if (fExceptionCallBack == null) { fExceptionCallBack = new ExceptionCallBack();//异常回调 //设置异常回调函数(可在回调函数中获取设备上下线状态等) if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) { log.debug("Set fExceptionCallBack function fail"); return; } else { log.debug("Set fExceptionCallBack function successfully!"); } } } if (GlobalVariable.loginMap.containsKey(camera.getId())) { GlobalVariable.loginMap.remove(camera.getId()); } @@ -269,6 +270,15 @@ //添加到流媒体 addVtdu(camera); //创建引导队列 createGuideQueue(camera); } catch (Exception ex) { log.error("注册设备异常", ex); } } //创建引导队列 private void createGuideQueue(ArdCameras camera) { if(camera.getCamAlarmGuideEnable()!=null) { if (camera.getCamAlarmGuideEnable() == 1) { if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); @@ -278,11 +288,8 @@ queueHandler.process(camera.getId()); } } } catch (Exception ex) { log.error("注册设备异常", ex); } } //添加到流媒体 private void addVtdu(ArdCameras camera) { try {