首先普及下博主在工程项目开发中的基本情况,在一个叫做A的模块中,推送消息的topic采用‘to’开头,接收其它模块信息的topic是‘from’开头。
后来需要增加一个模拟服务端,所以开发了B模块用作仿真服务,B服务的推送消息的topic采用‘from’开头,接收其它模块信息的topic是‘to’开头,可以发现刚好和A模块是反过来的。
A模块是先开发的,一直运行良好,B模块后开发的,因为很多基础代码和A的情况很类似,所以迁移了A的大部分代码,然后做了定制化的微调。事实上微调不是太花费时间和精力,而微调之后的调试让博主费了好一番功夫,接下来博主直奔主题,分享下在微调时埋的雷以至于在调试时踩的坑。
1、B模块依然中依然使用A模块的topic规则;
2、B模块订阅到到信息之后做逻辑处理时,由于是仿真服务,部分逻辑需要引入sleep函数,导致接收消息的线程因此而频繁的断开重连。
对于第1条的详细介绍:
# A模块的topic的示意代码
A.receive = "from/v1/#"
A.send = "to/v1"
当B模块在调整这处代码的时候,应该改成如下【注:‘#’通配符很关键,一定要加】
# B模块的topic的示意代码
B.send = "from/v1"
B.receive = "to/v1/#"
对于第2条的详细介绍:
可将含有sleep的逻辑分装在一个函数方法中,然后掉进线程池运行,不影响主线程的执行,进而也不会发生断开重连的情况。
以上就是博主在mqtt的开发上所踩的一个坑,后续有踩到新的坑了再和各位读者朋友们相约下篇采坑文章。