尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

mochi-mqtt/server 实现一个mqtt bridge 功能

mochi-mqtt/server 实现一个mqtt bridge 功能
📅 发布时间:2026/6/19 7:28:42

mochi-mqtt/server 实现一个mqtt bridge 功能

mochi-mqtt/server内置了一个比较有意思的功能InlineClient 通过此接口我们就可以实现一个类似nanomq 的mqtt bridge 功能,而且开发起来比较方便

参考实现机制

image

简单说明: 就是通过一个mqtt client 接受mqtt broker 的消息,结合配置的信息,讲数据发给mochi-mqtt/server 的client 或者给mqtt broker

参考代码

就是一个简单示例代码,代码比较简单,主要是一个简单的演示,讲mqtt broker 的消息转发给mochi-mqtt/server client

package mainimport ("fmt""log""os""os/signal""syscall""time"mqttclient "github.com/eclipse/paho.mqtt.golang"mqtt "github.com/mochi-mqtt/server/v2""github.com/mochi-mqtt/server/v2/hooks/auth""github.com/mochi-mqtt/server/v2/listeners"
)func main() {sigs := make(chan os.Signal, 1)done := make(chan bool, 1)signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)go func() {<-sigsdone <- true}()server := mqtt.New(&mqtt.Options{InlineClient: true, // 此参数是核心,默认没开启,同时注意此参数应该在mqtt 初始化的时候赋值,其他地方不行,目前会有问题})_ = server.AddHook(new(auth.AllowHook), nil)tcp := listeners.NewTCP(listeners.Config{ID: "t1", Address: ":1889"})err := server.AddListener(tcp)if err != nil {log.Fatal(err)}go func() {if err := server.Serve(); err != nil {log.Fatalf("[服务端启动失败] %v", err)}}()go func() {messagePubHandler := func(client mqttclient.Client, msg mqttclient.Message) {fmt.Printf("收到消息: [%s] %s\n", msg.Topic(), msg.Payload())server.Publish("dalongdemo", msg.Payload(), false, 0)}topicMap := map[string]byte{"topic/one":   0,"topic/two":   1,"topic/three": 2,}opts := mqttclient.NewClientOptions()opts.AddBroker("tcp://localhost:1886")opts.SetClientID("go_mqtt_client")opts.SetAutoReconnect(true)opts.SetDefaultPublishHandler(messagePubHandler)opts.SetConnectRetry(true)opts.SetKeepAlive(10 * time.Second)opts.SetConnectionLostHandler(func(client mqttclient.Client, err error) {fmt.Println("❌ 连接丢失:", err)})// 重连成功的回调messageHandler := func(client mqttclient.Client, msg mqttclient.Message) {defer func() {if r := recover(); r != nil {fmt.Printf("[消息处理异常] %v\n", r)}}()fmt.Printf("Received message on topic: %s\n", msg.Topic())fmt.Printf("Payload: %s\n", msg.Payload())// 使用InlineClient 进行发布,实际上就是对于mqtt broker 的消息,转发给mochi-mqtt/server 的clientif err := server.Publish("dalongdemo", msg.Payload(), false, 0); err != nil {fmt.Printf("Error publishing message: %v\n", err)}}opts.SetOnConnectHandler(func(client mqttclient.Client) {fmt.Println("✅ 重连成功,重新订阅主题")// 断线后需要手动恢复订阅if token := client.SubscribeMultiple(topicMap, messageHandler); token.Wait() && token.Error() != nil {fmt.Println("订阅失败:", token.Error())}})client := mqttclient.NewClient(opts)token := client.Connect()token.Wait()if err := token.Error(); err != nil {log.Printf("[连接MQTT服务器失败] %v", err)}if token := client.SubscribeMultiple(topicMap, messageHandler); token.Wait() {if err := token.Error(); err != nil {log.Printf("[订阅主题失败] %v", err)return}}log.Printf("📡 已订阅: %v", topicMap)}()<-done
}

说明

以上的实现比较简单,是一个单向的,如果需要讲mochi-mqtt/server 消息转发mqtt broker 的实现是类似的

参考资料

https://docs.nats.io/running-a-nats-service/configuration/mqtt

https://github.com/mochi-mqtt/server

https://github.com/nanomq/nanomq

相关新闻

  • 2025年立式TYPE-C母座厂家推荐排行榜,TYPE-C接口,USB-C母座,立式贴片TYPE-C连接器,防水TYPE-C母座公司精选
  • 2025年沈阳酒店电话推荐:北站西塔丽柏宠物友好市中心步行地铁口。
  • 2025年发电机厂家推荐排行榜,发电机组出租,柴油发电机出租,甲醇发电机组租赁,移动式发电机出租,维修保养服务公司推荐

最新新闻

  • 2026随州黄金回收白银回收铂金回收门店实测|本地正规实体老店无套路门店推荐 - 中安检金银铂钻回收
  • 2026 无锡无套路黄金回收商家白名单排行:线上预估价等同到手价门店汇总 - 开心测评
  • STM32CubeMX实战指南:FreeRTOS消息队列在任务间高效通信的设计与实现
  • 面试官坏笑:“你用 AI 编程半年了,那怎么保证 Claude Code 写出来的代码是对的?”我:“直接用 Claude Opus 4.8!”
  • 广州海珠区金价高位运行,市民上门变现正当时 - 上门黄金回收
  • 合肥市管道漏水检测,室外地埋消防市政主管网漏水检测一站式服务 - 同城资讯

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号