使用java paho客户端 订阅共享主题收不到消息

错误报告

环境

  • EMQX 版本: 5.0.16
  • java mqtt客户端:org.eclipse.paho.client.mqttv3:1.2.5

共享主题如下图

  • 过程描述
    使用mqttX向 topic:Client/863005061108358/110 发送消息
    并且MQTTX也订阅了共享主题 可以收到消息
    **
  1. 但是 java客户端收不到共享主题的消息

**

共享订阅就是多个客户端同时消费同一个主题下的消息,只有其中一个可以接收到 PUB 端发出来的消息。

你现在观察到的现象应该是共享订阅消息一直被发给 mqttx 的那个订阅者了,java 客户端没有被投递过共享订阅消息。试试更改一下共享订阅策略,或者让 mqttx 的共享订阅者下线再试验一下。

这里是相关文档:共享订阅机制介绍

目前只有 java客户端订阅了共享主题

用MQTTX向共享主题发送消息,JAVA客户端仍然收不到共享主题下得消息

可以提供下有相关的日志还有环境信息么,例如你的 java 客户端输出的日志,以及 EMQX 的日志。
另外可以抓包看一下。

我这边用 v5.0.16 或最新的 v5.0.20 ,客户端使用 MQTTX 1.9.1 snap 版,都没能复现出来你所描述的问题。

我用MQTTX 订阅共享主题也是可以收到消息的,就是用Java客户端收不到。
我把java客户端的源码给你把(其中有一些将消息发送到mq的代码可以去掉)
https://www.zgfcdl.net/temp2/MqttConfig.java
https://www.zgfcdl.net/temp2/TBDMqttService.java

org.eclipse.paho org.eclipse.paho.client.mqttv3 1.2.5

你可以链接我的EMQX(没有校验用户名密码)
tcp://106.14.197.252:1883

org.eclipse.paho org.eclipse.paho.client.mqttv3 1.2.5
   <dependency>
            <groupId>org.eclipse.paho</groupId>
            <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
            <version>1.2.5</version>
        </dependency>

这两个 java 源文件访问不到。
另外检查一下 EMQX 日志输出吧,或者也可以用 log_trace 功能,检查一下 EMQX 有没有给 java 客户端发送 PUBLISH 报文。

java源文件
https://yzm-pub.oss-cn-shanghai.aliyuncs.com/temp2/TBDMqttService.java
https://yzm-pub.oss-cn-shanghai.aliyuncs.com/temp2/MqttConfig.java
我试试

我使用日志追踪“
这是我订阅了 Client/+/110所产生的日志。
我的Java客户端订阅了 $share/g/Client/+/110主题
日志中没有显示往java客户端发送消息
是否可以加个qq? 我的qq 786004470

2023-03-16T13:35:07+08:00 [PUBLISH] mqttx_cece6143@218.93.48.30:49745 msg: publish_to, topic: Client/123/110, payload: {
  "msg": "hello"
}
2023-03-16T13:35:55+08:00 [SUBSCRIBE] mqttx_cece6143@218.93.48.30:49745 msg: subscribe, sub_id: mqttx_cece6143, sub_opts: [nl: 0, qos: 0, rap: 0, rh: 0, share: h, sub_props: []], topic: Client/+/110
2023-03-16T13:36:01+08:00 [PUBLISH] mqttx_cece6143@218.93.48.30:49745 msg: publish_to, topic: Client/123/110, payload: {
  "msg": "hello"
}
2023-03-16T13:37:26+08:00 [UNSUBSCRIBE] mqttx_cece6143@218.93.48.30:49745 msg: unsubscribe, sub_opts: [nl: 0, qos: 0, rap: 0, rh: 0, share: h, sub_props: [], subid: mqttx_cece6143], topic: Client/+/110
2023-03-16T13:37:29+08:00 [PUBLISH] mqttx_cece6143@218.93.48.30:49745 msg: publish_to, topic: Client/123/110, payload: {
  "msg": "hello"
}
2023-03-16T13:37:54+08:00 [PUBLISH] mqttx_cece6143@218.93.48.30:49745 msg: publish_to, topic: Client/123/110, payload: {
  "msg": "hello"
}

你可以参考一下这里的 example 对比一下你的程序
mqtt-client-java

我发了两条消息,两个共享订阅者各收到了一条消息。

1 个赞

这个问题后面解决了吗 咋解决的

请问你们解决了么?我们遇到的问题是自定义的监听器无法监听共享订阅的topic,都被callback捕获了。