问下使用MQTT的批量订阅接口,结果只有第一个主题收到了消息,其他主题无法收到,是为什么?

环境信息

  • EMQ X 版本:4.3.10
  • 操作系统及版本:centos7
  • 其他

问题描述

使用以下方式批量订阅成功,但是只有第一个主题device_info能收到订阅消息。
String defaultTopic = “device_info, status, setting, offline, cmd”;
// 主题集合
String[] topics = StringUtils.split(defaultTopic, “,”);
// 服务质量集合
String[] qos = StringUtils.split(defaultQos, “,”);

   // 服务质量集合
   int[] qosArray = new int[qos.length];

   for (int i = 0; i < qos.length; i++) {
       qosArray[i] = Integer.parseInt(qos[i]);
    }
   // 批量订阅
    mqttOperateClient.subscribe(topics, qosArray);

在 dashboard 看下这个设备的订阅状态对不对

订阅的状态都是对的,全部正常

是不是别的 topic 没有生产者在 publish ?

不会的,我主动publish 某个具体的topic ,都没有消息收到

看起来仍然像是订阅没有,你看下客户端页面,找一台批量订阅的设备,然后检查它的订阅列表是否完全。如果订阅看起来是没问题的,只能追踪一下设备的日志了。你的客户端使用的是 paho 吗?

是的,使用的是paho。


订阅的日志也是正常的。

你是否在 messageArrive 回调函数里做了publish?paho 库是不能在回调里做 publish 的,会导致接收消息业务一直卡住,然后出现的现象就是仅收到一条消息然后卡住,后面的消息收不到也无法发出来。这个地方要注意使用异步的方式处理

目前的确是有的,之前貌似messageArrive 回调函数里没做publish的时候好像也不行,我做个测试看看。那么顺便问问,paho库和spring in库,哪个好些?

都是标准库,在我们看来区别不大。

感谢您耐心的回答,那么接下来我讲根据您的分析,再次测试。