概述
最近的一个项目是在对接hk威视的一个平台, 他们的数据是通过MQTT协议进行发布的. 而我之前从来没有接触过MQTT协议, 所以就基于mosquitto搭建了一个MQTT服务, 又写了一个测试文件, 以熟悉后续可能的相关操作.
windows下的mosquitto的安装配置可以查看此教程, 还是比较详细的, 地址如下:
https://www.cnblogs.com/zkwarrior/p/10972464.html
此测试代码用的是github上的开源库, 地址如下:
https://github.com/eclipse/paho.mqtt.golang
<一> mosquitto的配置:
在实际使用中, 为了安全, MQTT服务会配置user-passwd或者SSL/TLS. 在这里使用用户名和密码.
1, 首先用mosquitto_passwd.exe生成用户名和密码, 在安装的目录执行如下命令后会让你手动输入密码:
.mosquitto_passwd.exe .pwfile sub
生成的<用户名-密码>文件如下:
其中pub和sub是我在执行上述命令时指定的用户名, 后面的则为加密后的密码.
2, 配置mosquitto.conf
为了使用户名和密码生效, 需要在mosquitto.conf里配置password_file这一字段, 我自己配置的为:
password_file C:DevelopAppMosquittopwfile
其他项都是使用默认的, 然后启动mosquitto:
.mosquitto.exe -c .mosquitto.conf
<二> golang编码:
package main
import (
"fmt"
"time"
MQTT "github.com/eclipse/paho.mqtt.golang"
)
// 订阅回调
func subCallBackFunc(client MQTT.Client, msg MQTT.Message) {
fmt.Printf("Subscribe: Topic is [%s]; msg is [%s]n", msg.Topic(), string(msg.Payload()))
}
// 连接MQTT服务
func connMQTT(broker, user, passwd string) (bool, MQTT.Client) {
opts := MQTT.NewClientOptions()
opts.AddBroker(broker)
opts.SetUsername(user)
opts.SetPassword(passwd)
mc := MQTT.NewClient(opts)
if token := mc.Connect(); token.Wait() && token.Error() != nil {
return false, mc
}
return true, mc
}
// 订阅消息
func subscribe() {
// sub的用户名和密码
b, mc := connMQTT("tcp://127.0.0.1:1883", "sub", "aaabbb")
if !b {
fmt.Println("sub connMQTT failed")
return
}
mc.Subscribe("topic_tp", 0x00, subCallBackFunc)
}
// 发布消息
func publish() {
// pub的用户名和密码
b, mc := connMQTT("tcp://127.0.0.1:1883", "pub", "aaabbb")
if !b {
fmt.Println("pub connMQTT failed")
return
}
for {
mc.Publish("topic_tp", 0x00, true, "Hello, this is publisher")
time.Sleep(time.Second)
}
}
func main() {
subscribe()
publish()
}
<三> 执行测试:
测试结果如下:
结束:
如果有什么问题, 欢迎指正, 谢谢.
最后
以上就是高挑白猫为你收集整理的以mosquitto为服务, 用golang实现简单的mqtt发布和订阅的全部内容,希望文章能够帮你解决以mosquitto为服务, 用golang实现简单的mqtt发布和订阅所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复