问题背景:在xx项目中,需要接受雷达设备的告警,在反复测试的过程中,在日志中显示始终只与一个雷达设备建立了连接,其他设备都没有连接的信息,而在数据库中的雷达设备有10多个.
排查过程:在排查静态代码过程中,接受雷达设备告警,需要与设备建立连接,如下:
http://" + deviceSdkDTO.getIp() + "/ISAPI/Event/notification/alertStream;
根据这个地址以及username,password等鉴权信息去建立URLConnection,如下代deviceSdkList做了循环,从结果来看只有一个连接建立,这里可能需要多线程去处理.
deviceSdkList.forEach(item->{
try {
log.info("****************雷达设备初始化:" + item.getIp());
hikRadarService.receiveAlarmMsg(item);
} catch (IOException e) {
log.info("海康周界雷达连接异常,设备IP:{}"+item.getIp());
e.printStackTrace();
}
});
修改后:
deviceSdkList.forEach(item->{
//优化为多个线程
new Thread(new Runnable() {
@Override
public void run() {
try {
log.info("****************雷达设备初始化:" + item.getIp());
hikRadarService.receiveAlarmMsg(item);
} catch (IOException e) {
log.info("海康周界雷达连接异常,设备IP:{}"+item.getIp());
e.printStackTrace();
}
}
}).start();
});
最后,从日志来看,与所有设备都建立了连接,在后续的运维人员观察下,也接受到了这些设备的告警信息.
1977

被折叠的 条评论
为什么被折叠?



