0%

mqtt发布被阻塞

文章字数:281,阅读全文大约需要1分钟

记录一次debug的过程。

现象

  1. 最初是发现mqtt只会接收一次订阅到的消息,然后就不会再接收消息了。
  2. 之后经过排查发现是publish方法被阻塞了,进去就出不来。

排查过程

  1. 最早的表现是使用mqttBox模拟设备向服务器发送请求,只发现服务器回应了一次。
  2. 因为是本地开发环境,所以直接打断点。发现不是回应出错,而是只接受到了一次订阅的信息。
  3. 再次跟踪程序,发现进入publish方法之后再也没有出来。
  4. 期初以为只是发送的方法被阻塞,后来意识到发布消息是在处理订阅的方法里以同步的形式进行的,而且还使用同一个连接。有可能是发送需要等待上个任务结束才能进行,然而上个任务需要发送结束了才能返回。于是陷入死循环。
  5. 接收到消息用新开的线程处理,问题解决。