第8章 Mosquitto消息高级特性

第8章 消息高级特性

8.1 消息队列机制



QoS 0
QoS 1/2
消息到达
是否有订阅者?
立即投递
QoS等级?
丢弃
入队等待
新订阅者连接
发送队列消息

8.2 $SYS系统主题

bash 复制代码
# 监控所有系统主题
mosquitto_sub -v -t "$SYS/#"

# 常用系统主题
$SYS/broker/version           # 版本
$SYS/broker/uptime            # 运行时间
$SYS/broker/timestamp         # 时间戳
$SYS/broker/clients/connected # 在线客户端
$SYS/broker/bytes/received    # 接收字节
$SYS/broker/messages/stored   # 存储消息

$SYS主题树

$SYS
broker
clients
version
uptime
load
bytes
messages
connected
disconnected
maximum
received
sent
stored

8.3 共享订阅

订阅者3 订阅者2 订阅者1 Broker 发布者 订阅者3 订阅者2 订阅者1 Broker 发布者 共享订阅组: g1 负载均衡选择一个订阅者 轮询到下一个订阅者 SUBSCRIBE share/g1/sensor/ SUBSCRIBE share/g1/sensor/ SUBSCRIBE $share/g1/sensor/ PUBLISH sensor/temp "25" PUBLISH sensor/temp "25" PUBLISH sensor/hum "60" PUBLISH sensor/hum "60"

共享订阅语法

bash 复制代码
# 共享订阅格式: $share/{GroupName}/{Topic}

# 订阅者1
mosquitto_sub -t "$share/group1/sensor/#"

# 订阅者2
mosquitto_sub -t "$share/group1/sensor/#"

# 订阅者3
mosquitto_sub -t "$share/group1/sensor/#"

# 发布消息
mosquitto_pub -t "sensor/temp" -m "25"
# 只有其中一个订阅者收到

应用场景

共享订阅
负载均衡
多消费者
避免重复处理
提高吞吐量
队列处理
任务分发
并行处理
水平扩展
场景
数据采集集群
消息处理队列
微服务集成

8.4 主题别名

Broker 客户端 Broker 客户端 首次发送完整主题 后续使用别名 节省带宽 PUBLISH sensor/device001/temp Topic Alias: 1 缓存: 1 ->> sensor/device001/temp PUBLISH Topic Alias: 1 展开: sensor/device001/temp

主题别名配置

bash 复制代码
# Mosquitto 2.x 自动支持主题别名
# MQTT 5.0特性

# 客户端使用
mosquitto_pub -t "very/long/topic/name" -m "data" -q 1
# 自动使用别名缩短后续消息

8.5 请求/响应模式

服务端 Broker 请求者 服务端 Broker 请求者 生成相关ID 处理请求 匹配相关ID 关联请求响应 PUBLISH cmd/request Correlation Data: xyz123 Response Topic: response/cmd PUBLISH cmd/request PUBLISH response/cmd Correlation Data: xyz123 Payload: "result" PUBLISH response/cmd

请求/响应示例

python 复制代码
# 请求者
import paho.mqtt.client as mqtt
import uuid

def on_message(client, userdata, msg):
    if msg.topic == "response/cmd":
        print(f"响应: {msg.payload}")

client = mqtt.Client()
client.on_message = on_message
client.connect("localhost", 1883)
client.subscribe("response/#")

correlation_id = str(uuid.uuid4())
client.publish(
    "cmd/request",
    "get_status",
    properties=[
        mqtt.Properties.PacketTypes.PUBLISH.CorrelationData(
            correlation_id.encode()
        ),
        mqtt.Properties.PacketTypes.PUBLISH.ResponseTopic(
            "response/cmd"
        )
    ]
)

8.6 消息过期

bash 复制代码
# MQTT 5.0 消息过期
# 单位: 秒

mosquitto_pub -t "sensor/data" -m "temp:25" \
  -D publish message-expiry-interval 60 \
  -q 1

8.7 用户属性

消息
Payload
User Properties
key1: value1
key2: value2
key3: value3
元数据传递

用户属性示例

bash 复制代码
# 使用mosquitto_pub
mosquitto_pub -t "sensor/data" -m "25.5" \
  -D publish user-property "location,livingroom" \
  -D publish user-property "type,temperature" \
  -D publish user-property "unit,celsius"

8.8 本章小结

掌握了MQTT高级特性,包括共享订阅、主题别名、请求响应等。

相关推荐
楷哥爱开发6 小时前
TikTok Shop新加坡本土店入驻:如何选择新加坡本土住宅IP?
网络·网络协议·tcp/ip
小弥儿6 小时前
GitHub今日热榜 | 2026-08-26:AI 大脑与知识管理扎堆
人工智能·学习·开源·github
荷蒲6 小时前
【小白量化Qbuddy】利用AI学习中文Python
人工智能·python·学习
继续商行6 小时前
数据库变更协作:研发与 DBA 如何约定 DDL 边界
人工智能
网安蟹佬霸6 小时前
# 网络流量分析实战:从Wireshark到入侵检测系统构建(2026最新版,附完整流量分析链与IDS规则集)
网络·测试工具·安全·开源·wireshark·密码学·哈希算法
IT_陈寒7 小时前
Vue的响应式更新有时候真的不听话
前端·人工智能·后端
柳絮飞祭奠7 小时前
Dify Windows Docker Desktop 部署文档
人工智能·深度学习·语言模型·数据分析·transformer·边缘计算·集成学习
DeepLink_20257 小时前
Triton第四课:基于对称内存融合 AllGather 与 MatMul,提速1.56倍
人工智能·芯片·技术科普
zhangfeng11337 小时前
AMD Instinct MI50(gfx906)上为 Qwen 系列模型优化并可用的 vLLM 相关仓库、Docker 镜像与实践指南。
人工智能·docker·ai编程·qwen·算子开发·vllm·mi50
其实防守也摸鱼7 小时前
信创是什么:一文读懂信息技术应用创新
人工智能·阿里云·云计算·github·copilot