为什么java linkkit网关重启必须要调用添加设备方法-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

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

简介: 思考 : 控制台存在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的






版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: