关于java后台通过artemis sdk的方式调用超过一个以上海康平台restful接口时产生的数据丢失问题的排查和解决

项目需实时获取不同园区海康门禁设备数据,通过定时任务轮询SDK,但静态变量导致参数冲突,引起数据丢失。解决方案是放弃SDK,改用获取token的http服务调用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 项目背景

公司有一个项目,需要获取海康门禁等设备的出入记录,因为要实时获取海康设备的数据,所以后台通过定时任务的方式定时去轮询海康的restful接口服务,交互方式是走的海康提供的标准的sdk调用。但是因为业务方的设备在不同的园区,所以java后台要同时去轮询部署在不同服务器环境下的两个海康平台。

  1. 产生的问题

如1中所述,我们的java服务要同时去轮询部署在不同服务器环境下的两个海康平台,这两个平台下的设备,设备数据,请求的密钥以及ip等网络环境都是不一致的,这就是引发数据丢失问题的根源。请看下图:

调用海康平台a的代码封装:

调用海康平台b的代码封装:

通过上述代码,我们可以看出调用代码其实是一样的,只是封装的调用参数不一致。初始化定时任务时,后台代码会第一次去初始化接口请求参数。而关键在于,sdk是通过静态变量的方式去封装调用参数的,比如请求的接口ip是通过ArtemisConfig.host方式声明的:

通过这种静态变量的方式调用,如果超过调用一个以上的海康平台服务,就会产生问题。我们的后台逻辑是这样的,启动定时任务的时候回去初始化一遍调用参数,如果定时任务a的启动顺序在定时任务b之后,那么定时任务a的调用参数(静态)就是被定时任务b的参数覆盖掉,导致定时任务a用的是定时任务b的请求参数,这样定时任务a里面就是请求不到数据(因为任务a调用到海康平台b那边去了),从而产生数据丢失的问题,反之亦然。

  1. 排查的过程

排查调用日志-排查定时任务代码-查看海康平台调用记录-综合评估讨论-本地模拟测试-发现问题所在-得出结论

  1. 解决方案

摒弃sdk的调用方式,采用获取token的方式进行http服务调用。

如需要具体的调用方式请私信!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值