学习目标:
实现go语言下goframe框架与EMQX搭建的MQTT Server的连接、订阅、推送、断开等操作
开发工具:
Win10 + goland
正式操作:
1、goLand下创建新功能 goframeMqttTestProject,开始安装gf框架(golang版本 >= 1.11)
-
go get -u -v /gogf/gf
-
-
go mod init
-
-
go mod edit -require /gogf/gf@latest
-
-
go mod tidy
2、创建文件,添加如下hello代码
-
package main
-
-
import (
-
"fmt"
-
"/gogf/gf"
-
)
-
-
func main() {
-
("hello world!")
-
// 打印GF版本
-
()
-
}
3、运行成功,结果如下。
4、开始搭建一个Web项目测试
-
package main
-
-
import (
-
"/gogf/gf/frame/g"
-
"/gogf/gf/net/ghttp"
-
)
-
-
func main() {
-
s := ()
-
("/", func(r *){
-
("Welcome GoFrame!")
-
})
-
("/hello", func(r *){
-
("Hello World!")
-
})
-
-
(80)
-
()
-
}
测试验证:
在网页下访问 localhost/,输出 Welcome GoFrame!
在网页下访问 localhost/hello,输出 Hello World!
5、调用一下上一节测试的在gin框架下写的代码,注意微修改:在import引用时,对"github.com/eclipse/"前面加了mqtt,否则报错。
-
package main
-
-
import (
-
"fmt"
-
mqtt "/eclipse/"
-
"time"
-
)
-
//订阅回调函数;收到消息后会执行它
-
var f = func(client , msg ) {
-
("TOPIC: %s\n", ())
-
("MSG: %s\n", ())
-
}
-
-
func main() {
-
//此处我是以ws方式接入的,请添你自己代理服务器的公网ip ,这里只是举例
-
opts := ().AddBroker("ws://47.101.136.63:8083/mqtt")
-
("mqttx_2e81508d")
-
(2 * time.Second)
-
(f)
-
(1 * time.Second)
-
(false)
-
c := (opts)
-
if token := (); () && token.Error() != nil {
-
panic(token.Error())
-
}
-
//订阅
-
if token := ("go-mqtt/sample", 2, nil); () && token.Error() != nil {
-
(token.Error())
-
-
}
-
time.Sleep(1 * time.Second)
-
//发布
-
if token := ("go-mqtt/sample", 2, false,"博主的第一篇博客"); () && token.Error() != nil {
-
(token.Error())
-
-
}
-
-
-
//取消订阅
-
if token := ("go-mqtt/sample"); () && token.Error() != nil {
-
(token.Error())
-
-
}
-
//关闭链接
-
(250)
-
-
time.Sleep(20 * time.Second)
-
}
运行成功