首页 > 其他分享 >go对接mqtt

go对接mqtt

时间:2024-07-25 12:26:04浏览次数:15  
标签:... 对接 MQTT mqtt token func go opts

在Go语言中对接MQTT服务,你可以使用 paho.mqtt.golang 这个库,这是一个Eclipse Paho MQTT客户端的Go语言实现。以下是一些基本步骤和示例代码,帮助你开始使用Go语言对接MQTT服务。
1. 安装MQTT客户端库: 使用Go的包管理器安装 paho.mqtt.golang 库:
go get github.com/eclipse/paho.mqtt.golang
2. 创建MQTT连接: 设置MQTT服务器的地址、端口和客户端ID,然后创建一个MQTT客户端并连接到MQTT服务器:
package main

import (
   "fmt"
   "time"
   mqtt "github.com/eclipse/paho.mqtt.golang"
)

func main() {
   opts := mqtt.NewClientOptions()
   opts.AddBroker("tcp://broker.emqx.io:1883")
   opts.SetClientID("go_mqtt_client")
   opts.SetUsername("emqx")
   opts.SetPassword("public")

   client := mqtt.NewClient(opts)
   if token := client.Connect(); token.Wait() && token.Error() != nil {
      panic(token.Error())
   }
}
3. 订阅主题: 订阅一个主题,并设置消息处理器来接收消息:
var messagePubHandler mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Message) {
   fmt.Printf("Received message: %s from topic: %s\n", msg.Payload(), msg.Topic())
}

func main() {
    // ... 省略其他代码 ...
    token := client.Subscribe("topic/test", 1, messagePubHandler)
    token.Wait()
    fmt.Printf("Subscribed to topic: %s\n", "topic/test")
}
4. 发布消息: 向一个主题发布消息:
func main() {
    // ... 省略其他代码 ...
    for {
        token := client.Publish("topic/test", 0, false, "Hello MQTT")
        token.Wait()
        time.Sleep(2 * time.Second)
    }
}
5. 使用TLS/SSL连接: 如果需要使用TLS/SSL加密连接,可以设置TLS配置:
func NewTlsConfig() *tls.Config {
    certpool := x509.NewCertPool()
    ca, err := ioutil.ReadFile("ca.pem")
    if err != nil {
        log.Fatalln(err.Error())
    }
    certpool.AppendCertsFromPEM(ca)
    return &tls.Config{
        RootCAs:            certpool,
        ClientAuth:         tls.NoClientCert,
        ClientCAs:          nil,
        InsecureSkipVerify: true,
    }
}

func main() {
    // ... 省略其他代码 ...
    opts.SetTLSConfig(NewTlsConfig())
}
6. 处理连接丢失: 设置连接丢失处理器,以便在连接丢失时进行相应的处理:
var connectLostHandler mqtt.ConnectionLostHandler = func(client mqtt.Client, err error) {
   fmt.Printf("Connect lost: %v\n", err)
}

func main() {
    // ... 省略其他代码 ...
    opts.OnConnectionLost = connectLostHandler
}
这些步骤提供了一个基本的框架,你可以根据自己的需求进行调整和扩展。例如,你可以添加多个订阅主题、发布不同的消息或者处理更复杂的MQTT功能,如遗嘱消息、保留消息等。记得在使用时替换示例代码中的服务器地址、端口、主题等参数为你自己的MQTT服务器信息。
 

标签:...,对接,MQTT,mqtt,token,func,go,opts
From: https://blog.csdn.net/leijmdas/article/details/140686578

相关文章

  • 【云原生之kubernetes实战】在k8s环境下部署go-file文件分享工具
    【云原生之kubernetes实战】在k8s环境下部署go-file文件分享工具一、go-file介绍1.1go-file简介1.2go-file特点1.3go-file使用场景二、本次实践介绍2.1本次实践简介2.2本次环境规划2.3本次实践存储介绍2.4k8s存储介绍三、检查k8s环境3.1检......
  • Django request.data.get传送列表
    request.data.get('fa_no',[])代码片段通常用于Django处理视图中的传入请求数据。这一行代码试图从请求数据中获取键'fa_no'关联的值。如果在请求数据中未找到'fa_no',它会返回一个默认值空列表([])。以下是每个部分的解释:request:这是HTTP请求对象。data:这个属......
  • Django 自动将作者分配给创建帖子的用户
    我的作者被自动分配时遇到问题,它以前可以工作,但自从我添加了一些内联表单集后就停止工作了-这是我的模型:classRecipe(models.Model):title=models.CharField(max_length=100)description=models.TextField()author=models.ForeignKey(User,on_delet......
  • Django DRF安装设置 序列化器ModelSerializer 视图ModelViewSet 路由url 串讲
    在DjangoRESTFramework(DRF)中,重新编写API视图通常涉及几个步骤。以下是一个简单的示例,展示如何定义和注册视图集、序列化器和路由,以便你可以创建、读取、更新和删除(CRUD)数据。1.定义序列化器#serializers.pyfromrest_frameworkimportserializersfrom.models......
  • Django 你不知道的filterset_fields和filter_fields区别
    filter_fields和filterset_fields是DjangoRESTframework(DRF)中用于过滤的两个不同概念:filter_fields定义:在DRF的ModelViewSet中,filter_fields允许你指定可用于过滤的字段。用法:你可以在视图中设置这个属性,来指定哪些字段可以用于过滤。例如,如果你有一个模型......
  • Django 根据指定的数据库表生成相应的 Django 模型和注意事项
    要根据指定的数据库表生成模型,并且将这些模型放入指定的Django应用中,你可以按照以下步骤进行操作:配置数据库连接:确保你的settings.py文件中的数据库配置正确,以便Django能够连接到你的数据库。DATABASES={'default':{'ENGINE':'django.db.backends......
  • Django get_or_create和update_or_create 的作用和使用
    Djangoget_or_create和update_or_create的作用和使用:get_or_create和update_or_create是Django中的两个有用的方法,用于在数据库中获取或创建记录。如果记录不存在,则创建它们;如果存在,则返回现有记录。这两个方法帮助简化了避免重复记录的逻辑,并提供了一种简洁的方法来更新......
  • Django+Bootstrip 卡片模板设计 经典精品
    下面是一个完整的卡片模板代码,包含所有元素,并使用Django的模板语言来处理状态字段的条件渲染。同时还包括示例视图和URL配置。完整的卡片模板<divclass="card"><!--卡片图片--><imgsrc="{{product_package.image_url}}"class="card-img-top"alt="产品图片">......
  • PHP转Go系列 | 推荐一个强大的Go语言工具函数库
    大家好,我是码农先森。从PHP转到Go的朋友,常常会因为没有便捷的工具函数而感到苦恼。PHP写的多了就会形成路径依赖,在写Go的时候时不时就会想到PHP强大的数组函数。当然写Go的PHPer也想拥有这么强大的工具函数,在这个开源的编程世界总有一些伟大的程序员做着贡献,正是有......
  • 如何使用 Django 在 neo4j 中创建节点
    我正在开发一个网络应用程序。对于后端,我选择了Django,作为数据库,我想使用图形数据库,所以我选择了neo4j。有一个Python库neomodel用于使用neo4j和一个特定的库django_neomodel要合并|||使用Django。neomodel我可以使用Django和neo4j从......