MQTT Forwarding Golang
Mit dem Aufkommen des Zeitalters des Internets der Dinge (IoT) ist die Kommunikation zwischen Geräten immer wichtiger geworden. MQTT (Message Queuing Telemetry Transport) ist ein leichtes Messaging-Protokoll, das einen effizienten Datenaustauschmechanismus für unbegrenzte Geräte und Anwendungen über Netzwerkverbindungen mit geringer Bandbreite, hoher Latenz oder unzuverlässigen Netzwerken bietet. In diesem Artikel erfahren Sie, wie Sie mit Golang einen MQTT-Forward-Proxy-Server erstellen, damit verschiedene Geräte über das MQTT-Protokoll kommunizieren können.
Wir müssen zuerst Golang installieren. Sobald die Installation abgeschlossen ist, müssen wir das Paket paho-mqtt installieren, die Hauptbibliothek für die Kommunikation mit MQTT in Golang. Wir können es über den folgenden Befehl installieren:
go get github.com/eclipse/paho.mqtt.golang
Sobald wir fertig sind, erstellen wir einen Projektordner namens mqtt-forward, der eine Golang-Datei namens main.go enthält. Wir müssen das paho-mqtt-Paket in unseren Code importieren:
import ( "fmt" "github.com/eclipse/paho.mqtt.golang" )
Als nächstes müssen wir die MQTT-Client-Optionen festlegen:
opts := mqtt.NewClientOptions().AddBroker("tcp://broker.hivemq.com:1883").SetClientID("mqtt-forward")
In diesem Beispiel stellen wir eine Verbindung zum öffentlichen MQTT-Broker HiveMQ her, wählen das TCP-Transportprotokoll und den Port The aus Die Nummer ist 1883 und die Client-ID ist auf „mqtt-forward“ eingestellt. Wir können auch den Benutzernamen und das Passwort für die MQTT-Verbindung festlegen.
Jetzt stellen wir eine MQTT-Client-Verbindung her und verweisen darauf über die Zeigervariable client vom Typ mqtt.Client:
client := mqtt.NewClient(opts) if token := client.Connect(); token.Wait() && token.Error() != nil { panic(token.Error()) } defer client.Disconnect(250)
In diesem Beispiel erstellen wir eine neue Version des MQTT-Clients mit der Methode mqtt.NewClient(opts). Terminal- und Passoptionen. Nachdem wir eine Verbindung zum MQTT-Proxyserver hergestellt haben, schließen wir den MQTT-Client und warten bis zu 250 Millisekunden, um sicherzustellen, dass die Verbindung erfolgreich geschlossen wurde. Das Schlüsselwort „defer“ wird verwendet, um Bereinigungscode auszuführen, bevor die Funktion zurückkehrt. Dadurch wird sichergestellt, dass wir den MQTT-Client ordnungsgemäß schließen, wenn er nicht benötigt wird.
Außerdem müssen wir nach dem Verbindungsaufbau mit dem MQTT-Server eine Verarbeitungsfunktion erstellen, um MQTT-Nachrichten vom Gerät zu empfangen. Empfangene Nachrichten werden nach MQTT-Themen kategorisiert.
func onMessageReceived(client mqtt.Client, message mqtt.Message) { fmt.Printf("Received message: %s from topic: %s ", message.Payload(), message.Topic()) }
In diesem Beispiel drucken wir die Nutzlast (die Nutzlast ist der Teil, der die Daten tatsächlich überträgt) und das Thema der empfangenen MQTT-Nachricht.
Jetzt müssen wir das MQTT-Thema abonnieren. Mit dem folgenden Code können wir dem Client eine Rückruffunktion hinzufügen:
if token := client.Subscribe("testtopic/#", byte(0), onMessageReceived); token.Wait() && token.Error() != nil { panic(token.Error()) }
In diesem Beispiel abonnieren wir alle Themen, die mit „testtopic“ beginnen. Wir setzen QoS auf Byte 0, was bedeutet, dass die Nachrichten, die wir empfangen, nur einmal gesendet werden.
Unsere komplette Hauptfunktion sieht wie folgt aus:
func main() { opts := mqtt.NewClientOptions().AddBroker("tcp://broker.hivemq.com:1883").SetClientID("mqtt-forward") client := mqtt.NewClient(opts) if token := client.Connect(); token.Wait() && token.Error() != nil { panic(token.Error()) } defer client.Disconnect(250) if token := client.Subscribe("testtopic/#", byte(0), onMessageReceived); token.Wait() && token.Error() != nil { panic(token.Error()) } for { time.Sleep(time.Second) } } func onMessageReceived(client mqtt.Client, message mqtt.Message) { fmt.Printf("Received message: %s from topic: %s ", message.Payload(), message.Topic()) }
Nach dem Programmstart verbinden wir uns über TCP mit dem MQTT-Broker auf Port 1883, fügen eine Callback-Funktion hinzu und abonnieren alle Themen, die mit „testtopic“ beginnen. Schließlich geraten wir in eine Endlosschleife, sodass wir verbunden bleiben und weiterhin MQTT-Nachrichten empfangen können.
Wir können das Golang-Programm mit dem folgenden Befehl ausführen:
go run main.go
Zusammenfassend haben wir vorgestellt, wie man Golang und das paho-mqtt-Paket verwendet, um einen MQTT-Forward-Proxy-Server zu erstellen. Indem wir verstanden haben, wie man eine Verbindung zu einem MQTT-Brokerserver herstellt und bestimmte Themen abonniert, um Nachrichten von verschiedenen Geräten zu erfassen, konnten wir nun MQTT-Nachrichten auf gerätezentrierte Weise abrufen, was für die Erstellung von IOT-Anwendungen sehr hilfreich ist.
Das obige ist der detaillierte Inhalt vonmqtt vorwärts golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!