From 2d7896ecd6bcafb4c0457a83ee254ff2006481ce Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: Thu, 14 Dec 2023 09:40:36 +0800
Subject: [PATCH] 优化
---
ard-work/src/main/java/com/ruoyi/alarm/config/AsyncConfiguration.java | 21 ++++++++++
ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java | 33 ++++++++++------
ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueHandler.java | 4 +-
ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java | 2
ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java | 29 ++++++++++----
5 files changed, 64 insertions(+), 25 deletions(-)
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/config/AsyncConfiguration.java b/ard-work/src/main/java/com/ruoyi/alarm/config/AsyncConfiguration.java
index 55e35ff..9512bbb 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/config/AsyncConfiguration.java
+++ b/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;
+ }
}
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueHandler.java b/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueHandler.java
index b883dc7..7797e6e 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueHandler.java
+++ b/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) {
diff --git a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java
index c5961d1..e811055 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java
+++ b/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连接失败");
}
diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java
index 306fb1c..2eb90d2 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java
+++ b/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());
}
}
diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
index d822c17..8bf60c2 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
+++ b/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 {
--
Gitblit v1.9.3