以mosquitto为服务, 用golang实现简单的mqtt发布和订阅 - Go语言中文社区

以mosquitto为服务, 用golang实现简单的mqtt发布和订阅


最近的一个项目是在对接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()
}

 

<三> 执行测试:

测试结果如下:

结束:

如果有什么问题, 欢迎指正, 谢谢.

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/c_cppcoder/article/details/104520091
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-04-18 17:44:52
  • 阅读 ( 2331 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢