欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang中使用Mqtt的方法示例

 更新時間:2025年02月17日 09:36:51   作者:小吳-斌  
本文介紹了Golang中使用paho.mqtt.golang庫實現(xiàn)MQTT客戶端與服務器的連接、訂閱和消息收發(fā),具有一定的參考價值,感興趣的可以了解一下

MQTT 是一種基于發(fā)布/訂閱模式的 輕量級物聯(lián)網消息傳輸協(xié)議 ,可以用極少的代碼和帶寬為聯(lián)網設備提供實時可靠的消息服務,它廣泛應用于物聯(lián)網、移動互聯(lián)網、智能硬件、車聯(lián)網、電力能源等行業(yè)。

本文主要介紹如何在 Golang 項目中使用 github.com/eclipse/paho.mqtt.golang 客戶端庫 ,實現(xiàn)客戶端與 MQTT 服務器 的連接、訂閱、收發(fā)消息等功能。

項目初始化

環(huán)境為1.23.2

在這里插入圖片描述

本項目使用 paho.mqtt.golang 作為 MQTT 客戶端庫,安裝:

go get github.com/eclipse/paho.mqtt.golang

連接Mqtt

	opts := mqtt.NewClientOptions().AddBroker("tcp://broker.emqx.io:1883")
	opts.SetClientID("mqtt_golang_NTkxOD123213")  // Client ID
	// opts.SetUsername("mqtt_toys")  // 用戶名
	// opts.SetPassword("to113gz")  // 用戶密碼
	opts.SetDefaultPublishHandler(onMessageReceived)  // 訂閱主題時的消息處理函數

	client := mqtt.NewClient(opts)
	if token := client.Connect(); token.Wait() && token.Error() != nil {
		log.Fatal(token.Error())
		os.Exit(1)
	}

	// 訂閱主題
	// production/# 匹配 production/ 開頭的主題 
	if token := client.Subscribe("production/#", 0, nil); token.Wait() && token.Error() != nil {
		log.Fatal(token.Error())
		os.Exit(1)
	}

訂閱主題消息處理函數

func onMessageReceived(client mqtt.Client, message mqtt.Message) {
	now := time.Now()
	fmt.Printf("時間:%s\t接收topic: %s\tMessage: %s\n", now.Format("2006-01-02 15:04:05.000"), message.Topic(), message.Payload())
	// 在這里將消息轉發(fā)回業(yè)務平臺,您可以根據需要修改此部分
 
}

發(fā)送主題

	// 玩具入庫數據
	toysProduce := map[string]interface{}{
		"method": "produce",
		"params": map[string]interface{}{
			"sex": "1", 
			"name": "test",
			"ver": "V1.0.0",
		},
	}

	mjson, _ := json.Marshal(toysProduce) //轉json 
	// 發(fā)送代碼指令
	token := client.Publish("production/create", 0, false, string(mjson))
	token.Wait()

完成代碼

package main

import (
	"encoding/json"
	"fmt"
	"log"
	"os"
	"os/signal"
	"syscall"
	"time"

	mqtt "github.com/eclipse/paho.mqtt.golang"
)

func onMessageReceived(client mqtt.Client, message mqtt.Message) {
	now := time.Now()
	fmt.Printf("時間:%s\t接收topic: %s\tMessage: %s\n", now.Format("2006-01-02 15:04:05.000"), message.Topic(), message.Payload())
	// 在這里將消息轉發(fā)回業(yè)務平臺,您可以根據需要修改此部分 
}

func main() {
opts := mqtt.NewClientOptions().AddBroker("tcp://broker.emqx.io:1883")
	opts.SetClientID("mqtt_golang_NTkxOD123213")  // Client ID
	// opts.SetUsername("mqtt_toys")  // 用戶名
	// opts.SetPassword("to113gz")  // 用戶密碼
	opts.SetDefaultPublishHandler(onMessageReceived)  // 訂閱主題時的消息處理函數

	client := mqtt.NewClient(opts)
	if token := client.Connect(); token.Wait() && token.Error() != nil {
		log.Fatal(token.Error())
		os.Exit(1)
	}

	// 訂閱主題
	// production/# 匹配 production/ 開頭的主題
	if token := client.Subscribe("production/#", 0, nil); token.Wait() && token.Error() != nil {
		log.Fatal(token.Error())
		os.Exit(1)
	}

	// 玩具入庫數據
	toysProduce := map[string]interface{}{
		"method": "produce",
		"params": map[string]interface{}{
			"sex": "1", 
			"name": "test",
			"ver": "V1.0.0",
		},
	}

	mjson, _ := json.Marshal(toysProduce) //轉json
	fmt.Println("發(fā)送數據:", string(mjson))
	// 發(fā)送代碼指令
	token := client.Publish("production/create", 0, false, string(mjson))
	token.Wait()

	// 處理系統(tǒng)信號,以便在接收到SIGINT或SIGTERM時優(yōu)雅地關閉程序
	signalChan := make(chan os.Signal, 1)
	signal.Notify(signalChan, os.Interrupt, syscall.SIGTERM)

	<-signalChan
	fmt.Println("Received signal, shutting down...")
	client.Disconnect(250)
}

到此這篇關于Golang中使用Mqtt的方法示例的文章就介紹到這了,更多相關Golang使用Mqtt內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • 淺談go語言中別名類型的使用

    淺談go語言中別名類型的使用

    類型別名是 Go 1.9 版本添加的新功能,主要用于解決代碼升級、遷移中存在的類型兼容性問題,本文主要介紹了go語言中別名類型的使用,感興趣的可以了解一下
    2024-01-01
  • 教你一招完美解決vscode安裝go插件失敗問題

    教你一招完美解決vscode安裝go插件失敗問題

    VSCode是我們開發(fā)go程序的常用工具,但是安裝VSCode成功后,創(chuàng)建一個.go文件居然提示錯誤了,所以下面下面這篇文章主要給大家介紹了如何通過一招完美解決vscode安裝go插件失敗問題的相關資料,需要的朋友可以參考下
    2022-07-07
  • 安裝Sublime?Text支持Go插件的方法步驟

    安裝Sublime?Text支持Go插件的方法步驟

    本文主要介紹了安裝Sublime?Text支持Go插件的方法步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Go語言Http?Server框架實現(xiàn)一個簡單的httpServer

    Go語言Http?Server框架實現(xiàn)一個簡單的httpServer

    這篇文章主要為大家介紹了Go語言Http?Server框架實現(xiàn)一個簡單的httpServer抽象,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Go語言基礎模板設計模式示例詳解

    Go語言基礎模板設計模式示例詳解

    這篇文章主要為大家介紹了Go語言基礎設計模式之模板模式的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-11-11
  • Golang環(huán)境變量設置和查看工具go env詳解

    Golang環(huán)境變量設置和查看工具go env詳解

    go env 是 Go 工具鏈中的一個命令,用于設置和查看當前 Golang 環(huán)境的相關信息,對于理解、編譯和運行 Golang 程序非常有用,本文就給大家簡單的介紹一下Golang環(huán)境變量設置和查看工具go env,需要的朋友可以參考下
    2023-07-07
  • Go語言實現(xiàn)websocket推送程序

    Go語言實現(xiàn)websocket推送程序

    這篇文章主要介紹了Go語言實現(xiàn)websocket推送程序,WebSocket是基于TCP的一個雙向傳輸數據的協(xié)議,和HTTP協(xié)議一樣,是在應用層的,他的出現(xiàn),是為了解決網頁進行持久雙向傳輸數據的問題
    2023-01-01
  • go使用Viper管理配置文件的方法步驟

    go使用Viper管理配置文件的方法步驟

    在項目開發(fā)中,需要把一些配置配置提取出來,方便配置和管理,可以使用Viper工具,Viper 是 Go 應用程序的完整配置解決方案,也支持從環(huán)境變量中讀取,本文給大家介紹了go使用Viper管理配置文件的方法步驟,需要的朋友可以參考下
    2024-07-07
  • 一文帶你了解Go語言中的I/O接口設計

    一文帶你了解Go語言中的I/O接口設計

    I/O?操作在編程中扮演著至關重要的角色,它涉及程序與外部世界之間的數據交換,下面我們就來簡單了解一下Go語言中的?I/O?接口設計吧
    2023-06-06
  • 深入解析golang中的標準庫flag

    深入解析golang中的標準庫flag

    Go語言內置的flag包實現(xiàn)了命令行參數的解析,flag包使得開發(fā)命令行工具更為簡單,下面通過本文給大家詳細介紹下golang中的標準庫flag相關知識,感興趣的朋友一起看看吧
    2021-11-11

最新評論