在NATS MQTT中,如何发布保留消息(Retained Message)?
用NATS原生客户端发送MQTT保留消息的方法
如果你用NATS客户端连接作为MQTT服务器的NATS,要发送“固定”的保留消息,核心是在发布消息时添加特定的NATS消息头,标记这是一条MQTT保留消息:
- 发布消息时,给消息添加
$MQTT_RETAIN头部,值设为true - 发布的主题要和目标MQTT客户端订阅的主题完全匹配
给个Go语言NATS客户端的示例代码:
nc, err := nats.Connect(nats.DefaultURL) if err != nil { log.Fatal(err) } defer nc.Close() // 构造带保留标记的消息 msg := &nats.Msg{ Subject: "sensor/temperature", Data: []byte("25.6"), Header: nats.Header{"$MQTT_RETAIN": []string{"true"}}, } // 发布这条保留消息 if err := nc.PublishMsg(msg); err != nil { log.Fatal(err) }
额外注意点:
- 要是想清除某个主题的保留消息,只需要发布一条空内容、且带有
$MQTT_RETAIN: true头部的消息到该主题即可,NATS会自动移除对应的保留消息 - 确认你的NATS服务器已经开启MQTT兼容模式(一般默认启用,也可以通过配置
mqtt.enabled=true手动开启)
内容的提问来源于stack exchange,提问作者kolypto
相关产品推荐
相关产品推荐

