当前位置:主页 > 查看内容

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

发布时间:2021-05-03 00:00| 位朋友查看

简介:问题来源: 文档 https://help.aliyun.com/document_detail/100555.html?spm a2c4g.11186623.6.680.3a7c3e8e5MHv3s#h2-u7F51u5173u5F00u53D1u8FC7u7A0Bu8BF4u660E1 先看一下结论 ,不调用可以成功吗?前提条件一存在topo关系 我的代码配置文件 这里注释了添加设……
问题来源: 文档


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

image.png


先看一下结论 ,不调用可以成功吗?前提条件一存在topo关系

image.png


我的代码配置文件

image.png

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

image.png


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

image.png


分析原因1.先看日志

image.png

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

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

image.png


关键代码这两行

ISubDeviceChannel subDeviceChannel this.getSubDevChannel(subDevInfo);

if (subDeviceChannel null) {

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



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

image.png


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


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

image.png

image.png



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

image.png


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

image.png




3.所以结论

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







本文转自网络,原文链接:https://developer.aliyun.com/article/783893
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐