GoFlyGen框架一键安装实现MQTT Broker 物联网服务器
一、GMQT物联网MQTT插件|GoFlyGen框架原生商用级IoT能力
GMQT是GoFlyGen官方原生适配的高性能MQTT物联网消息服务插件,源自落地商用3年、历经海量真实项目打磨的独立GMQT物联网消息平台,性能稳定、实战性极强。插件深度适配GoFlyGen框架生态,完成数据存储、权限体系、运维体系的无缝打通,摒弃传统第三方MQTT服务的适配繁琐、兼容性差、运维割裂等痛点,是框架专属的一体化物联网消息解决方案。
插件全面兼容MQTT 3.0.0、3.1.1、5.0全协议规范,一站式搭载企业级全套IoT核心能力,涵盖设备上下线智能管理、主题精准订阅发布、保留消息、遗嘱消息、QOS0/1/2分级消息传输、设备权限隔离、消息持久化存储等核心功能,完美适配智能家居、工业设备传感采集、IoT网关通信、设备远程管控、实时数据推送、政企内网物联网等全场景业务需求。
二、核心核心优势|重新定义轻量化高性能IoT服务
1. 纯Go高并发内核,超低资源超高承载
依托Go语言原生协程调度优势,GMQT插件具备低内存占用、高吞吐、毫秒级消息转发的硬核性能,远超传统脚本式、代理式MQTT服务。无需高配服务器,可在低配云主机、虚拟主机、内网离线环境、ARM信创设备上稳定运行,单机支持海量物联网设备长连接并发接入,最大化提升服务器资源利用率,大幅降低企业部署运维成本。
2. 全平台极简部署,私有化离线无忧
拥有极致跨平台适配能力,全面兼容Windows、Mac、Linux、ARM全架构系统。跟随GoFlyGen框架实现单二进制一体打包,零复杂环境依赖、零第三方数据库依赖,支持一键安装、快速升级,完美适配政企私有化部署、内网离线项目、工控封闭场景,彻底解决传统IoT服务部署繁琐、外网依赖强的难题。
3. 深度融合框架生态,一体化商用运维
作为GoFlyGen原生插件,GMQT与框架权限管理、日志审计、菜单体系、插件生态、集群能力深度打通,实现统一后台管理、统一权限管控、统一运维监控,告别多系统割裂运维的繁琐,适配企业级标准化运维流程,可直接商用落地。
4. 灵活二次开发,拓展无限业务场景
内置完整开放API接口与WebHook回调体系,开发者可快速实现设备状态监听、自定义消息转发、设备数据对接、第三方系统联动等个性化开发,灵活拓展物联网业务形态,适配各类定制化IoT项目需求。
三、插件核心亮点汇总
-
原生高性能:纯Go内核、协程模型驱动,低功耗、高并发、高吞吐,海量设备稳定在线
-
全协议兼容:完整适配MQTT v3、v3.1.1、v5.0全版本协议,覆盖行业全部标准能力
-
全场景适配:支持公网在线、内网离线、信创ARM、私有化部署等各类环境
-
完善消息机制:全覆盖QOS分级传输、遗嘱/保留消息、消息持久化、主题ACL权限控制
-
极简运维体系:框架一体化管控,安装、启动、关闭、卸载全流程标准化,上手零门槛
-
高可拓展性:开放全量API与WebHook,轻松对接各类业务系统,支持个性化二次开发
四、精准适用场景
广泛适配工业物联网设备管控、智能硬件消息推送、传感器实时数据采集、设备远程通信、IoT数据大屏、政企私有化IoT系统、内网离线设备运维、小程序/APP实时消息交互等各类物联网业务场景,兼顾民用轻量化项目与工业级严苛项目。
五、极速安装部署|开箱即用,一键落地
GMQT插件功能完整、无需二次开发,安装后即可直接投入使用,搭配GoFlyGen框架标准化部署流程,快速搭建商用级MQTT Broker物联网服务器。
1. 插件安装
登录GoFlyGen框架后台,进入「开发者工具-代码仓库」,找到「MQTT Broker 物联网服务器」插件,点击一键安装即可完成插件部署。
2.启动MQTT服务
由于Gin 和 MQTT 两套独立信号,无法联动优雅关闭,所以我们需要再框架统一处理初始化和关闭操作,所以在安装好GMQTT代码后需要手动添加GMQTT启动和关闭底代码,添加操作如下:
2.1 找到代码位置
代码在:utils\router\router.go中,修改RunServer()// 优雅重启/停止服务器函数。
启动代码为:
// =============== 异步启动MQTT服务 =====================
go func() {
if err := mqservice.StartMqtt(); err != nil {
glogger.Error(fmt.Sprintf("MQTT服务启动失败:%v", err))
}
}()
// =========================
关闭服务代码:
// ===广播全局关闭信号,通知MQTT服务优雅退出=====
close(mqglobal.ShutdownChan)
mqglobal.BadgerHook.DB().Close()
// 短暂等待MQTT执行关闭逻辑
time.Sleep(1 * time.Second)
// =========================
下面是往哪走RunServer()完整代码,可以看到添加启动和关闭代码位置,在你添加时参考。
引入的package:
"gofly/utils/extend/gmqtt/mqglobal"
"gofly/utils/extend/gmqtt/mqservice"
调用代码:
// 优雅重启/停止服务器
func RunServer() {
//启动定时清除日志文件功能
if appcfg.OpenLogger.Bool() {
glogger.StartCleanCron()
}
//设置cpu个数
cpu_num := gconv.Int(appcfg.AppConf_arr["cpunum"])
if cpu_num > 0 {
mycpu := runtime.NumCPU()
if cpu_num > mycpu { //如果配置cpu核数大于当前计算机核数,则等当前计算机核数
cpu_num = mycpu
}
runtime.GOMAXPROCS(cpu_num)
}
//加载gin路由
path, _ := os.Getwd()
R := InitRouter(path)
//把路由推保存文件中
routerfilePath := "runtime/app/routers.txt"
routerfileFullPath := filepath.Join(path, routerfilePath)
routes := ""
for _, route := range R.Routes() {
if !strings.Contains(route.Path, "filename") && route.Path != "/" && !strings.Contains(route.Path, "/*filepath") {
routes = routes + fmt.Sprintf("%v:%v\n", route.Method, route.Path)
}
}
gfile.PutBytes(routerfileFullPath, []byte(routes))
//默认禁止ip直接访问
addrStr := "127.0.0.1:" + gconv.String(appcfg.AppConf_arr["port"])
if gconv.Bool(appcfg.AppConf_arr["ipAccess"]) {
addrStr = ":" + gconv.String(appcfg.AppConf_arr["port"])
}
srv := &http.Server{
Addr: addrStr,
Handler: R,
MaxHeaderBytes: 1024 * 20, // 最大请求头20KB
ReadTimeout: 10 * time.Second, // 读超时,防慢速攻击
}
//启动服务
go func() {
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("listen serve err: %s\n", err)
}
}()
// =============== 异步启动MQTT服务 =====================
go func() {
if err := mqservice.StartMqtt(); err != nil {
glogger.Error(fmt.Sprintf("MQTT服务启动失败:%v", err))
}
}()
// =========================
// 启动pprof服务
if gf.Bool(appcfg.AppConf_arr["runpprof"]) {
R.GET("/debug/pprof/*any", gin.WrapH(http.DefaultServeMux))
go func() {
if err := http.ListenAndServe("127.0.0.1:8081", nil); err != nil {
log.Fatalf("pprof server failed: %s\n", err)
}
}()
fmt.Printf("%c[1;40;33m%s%c[0m\n", 0x1B, "已开启pprof性能分析工具-浏览器访问:http://127.0.0.1:8081/debug/pprof/ 进行查看", 0x1B)
}
//开发环境
if gconv.String(appcfg.AppConf_arr["runEnv"]) == "debug" {
fmt.Printf("%c[1;40;32m%s%c[0m\n", 0x1B, "如果还没有安装-请在浏览器访问进行安装:http://127.0.0.1:"+gconv.String(appcfg.AppConf_arr["port"])+"/install", 0x1B)
fmt.Println("Listening and serving HTTP on :" + gconv.String(appcfg.AppConf_arr["port"]))
}
// 等待中断信号以优雅地关闭服务器(设置 5 秒的超时时间)
// Wait for interrupt signal to gracefully shutdown the server with a timeout of 5 seconds.
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
glogger.Error("Shutdown Server ...")
// ===广播全局关闭信号,通知MQTT服务优雅退出=====
close(mqglobal.ShutdownChan)
mqglobal.BadgerHook.DB().Close()
// 短暂等待MQTT执行关闭逻辑
time.Sleep(1 * time.Second)
// =========================
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := srv.Shutdown(ctx); err != nil {
glogger.Error(fmt.Sprintf("Server Shutdown err:%v", err))
}
// catching ctx.Done(). timeout of 5 seconds.
select {
case <-ctx.Done():
glogger.Error("timeout of 5 seconds.")
}
glogger.Error("Server exiting/服务已经优雅退出")
}
3.卸载GMQTT插件
如果需要卸载安装的GMQTT插件,需要删除手动添加到utils\router\router.go下面RunServer()中代码。
删除启动代码为:
// =============== 异步启动MQTT服务 =====================
go func() {
if err := mqservice.StartMqtt(); err != nil {
glogger.Error(fmt.Sprintf("MQTT服务启动失败:%v", err))
}
}()
// =========================
删除关闭服务代码:
// ===广播全局关闭信号,通知MQTT服务优雅退出=====
close(mqglobal.ShutdownChan)
mqglobal.BadgerHook.DB().Close()
// 短暂等待MQTT执行关闭逻辑
time.Sleep(1 * time.Second)
// =========================
最后再到“开发者工具-代码仓库”点击“卸载”即可完成卸载全部代码。
4. 端口部署说明
服务部署后,按需开放1883、8083、8084等对应端口,即可实现外部设备正常连接与数据传输。
六、官方体验与技术支持
GMQT插件功能、使用规范、开发文档与官方《GMQT物联网MQTT消息平台》完全同步,开发者可免费体验、快速上手:
-
在线体验地址:https://gmqt.goflys.cn/ (账号:admin,密码:admin)
-
官方开发&使用文档:https://doc.goflys.cn/docview?id=50
结语
GoFlyGen框架依托AI驱动全栈开发能力、轻量化部署、高可用、强拓展的核心优势,搭配原生GMQT物联网MQTT插件,为开发者与企业提供零门槛、高性能、可商用、可私有化的一站式物联网服务器搭建方案。无需复杂开发、无需冗余运维,快速落地各类IoT业务,大幅缩短项目周期、降低研发运维成本,是物联网项目开发部署的优选框架!
更多推荐
所有评论(0)