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

如何为Eclipse Mosquitto实现MQTT客户端主题隔离?替代弃用的client_id_prefixes

实现Mosquitto客户端专属主题隔离配置方案

核心思路

利用Mosquitto的ACL(访问控制列表)变量扩展配合per_listener_settings,实现客户端ID与专属主题的绑定,替代已弃用的client_id_prefixes。

具体配置步骤

1. 编辑Mosquit主配置文件(mosquitto.conf)

开启per_listener_settings确保监听器配置独立,避免全局冲突,同时指定ACL文件和认证规则:

# 启用监听器独立配置模式
per_listener_settings true

# 配置TCP监听端口(默认1883)
listener 1883

# 禁用匿名访问(强制客户端认证)
allow_anonymous false

# 指定密码文件(需预先创建)
password_file /etc/mosquitto/passwd

# 指定ACL规则文件
acl_file /etc/mosquitto/acl.conf

2. 创建密码文件(可选但推荐)

用mosquitto_passwd工具生成带认证的客户端账号,比如为client_id x创建密码:

mosquitto_passwd -c /etc/mosquitto/passwd x
# 按提示输入并确认密码

3. 编写ACL规则文件(acl.conf)

根据需求选择两种规则模式:

模式一:动态绑定(客户端ID直接对应主题前缀)

适合批量客户端,自动将client_id映射为主题前缀,比如client_id x只能访问client_x/#的所有子主题:

# 允许每个客户端读写自己专属主题的所有子主题
topic readwrite client_%c/#
模式二:固定映射(特定客户端ID绑定指定主题)

针对你的示例,让client_id x仅能访问client_123456789/#的子主题:

# 仅允许client_id为x的客户端读写指定主题
clientid x
topic readwrite client_123456789/#

4. 重启Mosquitto服务

systemctl restart mosquitto

验证方法

  • 用client_id x连接Broker,尝试发布消息到client_123456789/test,并订阅该主题,确认正常收发。
  • 用其他client_id(比如y)连接,尝试发布/订阅client_123456789/test,应该被Broker拒绝。

内容的提问来源于stack exchange,提问作者HMD.RNJ.98

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:05:18