HTTP API 为什么下发消息带上clientid还是多个设备同时收到消息?

环境信息

  • EMQX 版本:4.3.8
  • 操作系统及版本:windows
  • 其他

问题描述

两个设备同时订阅一个主题 ,服务端下发消息到指定的clientid 两个设备都收到了. 我想要的效果是只有对应的clientid设备才收到消息.

例如 example1 与 example2 同时订阅主题 a/b/c ,发送以下推文example1与 example2都收到了消息,那么我带上指定的clientid还有什么意义? 我想实现的效果是只给example1设备下发消息.

$ curl -i --basic -u admin:public -X POST "http://localhost:8081/api/v4/mqtt/publish" -d '{"topic":"a/b/c","payload":"Hello World","qos":1,"retain":false,"clientid":"example1"}'

{"code":0}

配置文件及日志

这个客户端 ID 的意思是发布这条消息的所有者,即模仿了这个 clientid 在发消息,不是指定接收者的意思。如果想指定接收者,可以使用 Topic 里带上 clientid,比如

publish mytopic/clientA
publish mytopic/clientB

终端订阅的时候带上自己的 clientid

subscribe mytopic/clientA

那岂不是每个设备都要订阅一个主题? :sweat_smile:

看下代理订阅功能,参考文档。可以自动为设备订阅上业务主题