为什么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的






目录
相关文章
|
2天前
|
存储 Java
深入探索Java语言中的方法
深入探索Java语言中的方法
|
2天前
|
Oracle 安全 Java
JAVA用Mail发送API的方法步骤教程
使用Java和Mail发送API实现自动化邮件发送,提高效率。步骤包括:1. 安装JDK并配置JAVA_HOME,2. 添加JavaMail库(可通过Maven或官网下载)。配置邮件发送涉及邮件服务器地址、端口和认证信息。创建邮件会话、邮件消息对象,然后使用Transport发送。示例代码展示完整流程。注意处理认证失败、连接问题和邮件发送失败等常见问题。
|
3天前
|
Java 开发者
Java的方法的重载
Java的方法的重载
|
3天前
|
存储 Java
Java的方法的声明与使用
Java的方法的声明与使用
|
3天前
|
Java
Java的抽象方法和抽象类
Java的抽象方法和抽象类
|
3天前
|
Java
Java的在类内部调用本类方法
Java的在类内部调用本类方法
|
4天前
|
存储 Java
Java数组与带参数方法:定义、调用及实践
Java数组与带参数方法:定义、调用及实践
11 1
|
2天前
|
安全 算法 Java
Java中的并发编程技术:解锁高效多线程应用的秘密
Java作为一种广泛应用的编程语言,其并发编程技术一直备受关注。本文将深入探讨Java中的并发编程,从基本概念到高级技巧,帮助读者更好地理解并发编程的本质,并学会如何在多线程环境中构建高效可靠的应用程序。
|
2天前
|
Java
Java中多线程的常见实现方式
Java中多线程的常见实现方式
11 2