为什么java linkkit网关重启必须要调用添加设备方法

问题来源: 文档


https://help.aliyun.com/document_detail/100555.html?spm=a2c4g.11186623.6.680.3a7c3e8e5MHv3s#h2-u7F51u5173u5F00u53D1u8FC7u7A0Bu8BF4u660E1

为什么java linkkit网关重启必须要调用添加设备方法


先看一下结论 ,不调用可以成功吗?

前提条件一存在topo关系

为什么java linkkit网关重启必须要调用添加设备方法


我的代码

配置文件

为什么java linkkit网关重启必须要调用添加设备方法

这里注释了添加设备方法,直接调用上线接口

为什么java linkkit网关重启必须要调用添加设备方法


结论

子设备一个也没有上线成功

为什么java linkkit网关重启必须要调用添加设备方法


分析原因

1.先看日志

为什么java linkkit网关重启必须要调用添加设备方法

2.这个是什么情况报出来的呢分析上线代码

一层一层的看,其实日志也能定位到,我是代码点进去的

为什么java linkkit网关重启必须要调用添加设备方法


关键代码这两行

ISubDeviceChannel subDeviceChannel = this.getSubDevChannel(subDevInfo);

if (subDeviceChannel == null) {

subDeviceChannel 不能为空 ,子设备通道不能为空



this.getSubDevChannel(subDevInfo);是去map里面拿的 ,是存在内存里面的

为什么java linkkit网关重启必须要调用添加设备方法


那这个subDeviceChannel什么时候才可以放进去呢


这里能看出GatewayChannel是一个单例模式 ,GatewayChannelImpl是GatewayChannel修饰的

为什么java linkkit网关重启必须要调用添加设备方法

为什么java linkkit网关重启必须要调用添加设备方法



所以搜索一下GatewayChannelImpl这个类有那个方法有把这个子设备通道放进去呢,唯一就只有topoAdd

为什么java linkkit网关重启必须要调用添加设备方法


然后看一下topoAdd调用链 就是addSubDevice调用了

为什么java linkkit网关重启必须要调用添加设备方法




3.所以结论

重启必须调用addSubDevice ,讲子设备通道放在单例模式的map中 ,不然无法走到上线的步骤 ,这个并不是平台必须要求的 ,sdk逻辑这么设计的 ,因为sdk本地要维护网关和子设备的关系是通过addSubDevice的






上一篇:设计前沿:25款精妙的 iOS 应用程序图标


下一篇:sharepoint 在做好备份后,网站管理员没有权限登录