文章字数:281,阅读全文大约需要1分钟
记录一次debug的过程。
现象
- 最初是发现
mqtt
只会接收一次订阅到的消息,然后就不会再接收消息了。 - 之后经过排查发现是
publish
方法被阻塞了,进去就出不来。
排查过程
- 最早的表现是使用
mqttBox
模拟设备向服务器发送请求,只发现服务器回应了一次。 - 因为是本地开发环境,所以直接打断点。发现不是回应出错,而是只接受到了一次订阅的信息。
- 再次跟踪程序,发现进入
publish
方法之后再也没有出来。 - 期初以为只是发送的方法被阻塞,后来意识到发布消息是在处理订阅的方法里以同步的形式进行的,而且还使用同一个连接。有可能是发送需要等待上个任务结束才能进行,然而上个任务需要发送结束了才能返回。于是陷入死循环。
- 接收到消息用新开的线程处理,问题解决。