You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在RabbitMQ中实现与EMQTT同款的共享订阅?

在RabbitMQ中实现MQTT共享订阅(基于Mosquitto工具)

嘿,我来帮你搞定这个问题!RabbitMQ的MQTT共享订阅逻辑和EMQTT大体一致,但有几个细节需要调整,咱们一步步来:

1. 先确认基础配置

首先得确保RabbitMQ的MQTT插件已经启用,这是实现MQTT功能的前提:

rabbitmq-plugins enable rabbitmq_mqtt

执行完命令后重启RabbitMQ服务,保证插件正常加载。

2. 修正命令的引号问题

你之前用的命令里是中文全角引号(‘’),这会让Mosquitto把引号当成主题的一部分,导致无法正确识别共享订阅前缀。一定要换成英文半角引号(''或"")!

3. 正确的共享订阅用法

RabbitMQ支持$share/<组名>/<主题>格式的共享订阅,和EMQTT的格式看起来一致,但要严格按照以下命令执行:

订阅者命令(两个订阅者都用这个)

mosquitto_sub -h <RabbitMQ主机IP/域名> -p 1883 -t '$share/my-group/test-topic' -v
  • -h:指定RabbitMQ的地址,本地运行的话可以省略
  • -p:RabbitMQ默认MQTT端口是1883,不用改
  • -t:主题必须用英文引号包裹,确保$share前缀被RabbitMQ正确解析
  • -v:可选参数,用来显示消息主题和内容,方便调试

发布者命令

mosquitto_pub -h <RabbitMQ主机IP/域名> -p 1883 -t 'test-topic' -m "Hello Shared Sub!"

和EMQTT一样,发布者直接发送到原始主题test-topic即可,RabbitMQ会自动把消息以轮询的方式分发给共享组内的订阅者(每个消息只会被一个订阅者接收)。

4. 进阶排查(如果还是收不到消息)

如果按上面的步骤操作后还是没效果,检查一下RabbitMQ的MQTT插件配置:

  • 确保mqtt.allow_shared_subscriptions配置为true(新版本默认开启,旧版本可能需要手动设置)
  • 可以用以下命令查看当前配置:
rabbitmqctl eval 'application:get_env(rabbitmq_mqtt, allow_shared_subscriptions).'

如果返回{ok,false},需要修改rabbitmq.conf文件,添加:

mqtt.allow_shared_subscriptions = true

修改后重启RabbitMQ即可。

5. 验证效果

启动两个订阅者终端,都执行订阅命令,然后用发布者发送消息,你会看到两个订阅者轮流收到消息,这就说明共享订阅功能正常工作啦!


内容的提问来源于stack exchange,提问作者Svp57

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:31:36