MQTT服务器的响应时超时问题

538 阅读1分钟

说出来大家可能不相信, 我的MQTT不能做转发操作, 而且只有一个话题不能做, 其他话题可以, 我靠搞雷啊. 但是狗了2天的时间, 终于发现了槽点, 但是本质上还是没有发现问题的本质, 这里我说一下遇到的这个问题, 和解决的方法。好了废话不多少,上代码!!!

本次使用工具版本为:

  • JDK: 1.8
  • SpringBoot: 2.5.4
  • MQTT: 3.1.1

先来一张问题的截图

响应超时.png

可以看到这里发布消息后就会爆出服务器响应超时 具体代码不贴了, 有需要的可以去我的博客查询名称MQTT2.0

这里有几点要说

  • 在messageArrived中接收消息
  • 在messageArrived中解析消息
  • 在messageArrived获取客户端信息对消息进行转发

好了。。。。完成这三步,你就可以报错了, 与我上方一致的错误,没发一次都时超时

  • 但是在MX中我们的消息是可以接收到的, 这里要归功于MQTT的会话过期储存策略,非常NICE

原因和解决:

  • 获取消息后, 不应该和messageArrived的线程中在进行发布
  • 开启线程池, 发布消息使用多线程发布

上两张问题点的截图吧

MX日志:

MX日志.png

官方解释:

官方解释.png

发布代码:

发布代码.png

好了, 今天的代码就到这里了, 如果大家对代码感兴趣, 可以关注下的我博客 www.openacloud.cn