赞
踩
MQTT发送数据与订阅主题,go语言实现。
- package main
-
- import (
- "fmt"
- mqtt "github.com/eclipse/paho.mqtt.golang"
- "time"
- )
-
- var messagePubHandler mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Message) {
- fmt.Printf("Received message: %s from topic: %s\n", msg.Payload(), msg.Topic())
- }
-
- var connectHandler mqtt.OnConnectHandler = func(client mqtt.Client) {
- fmt.Println("Connected")
- }
-
- var connectLostHandler mqtt.ConnectionLostHandler = func(client mqtt.Client, err error) {
- fmt.Printf("Connect lost: %v", err)
- }
-
- func main() {
- var broker = "172.16.3.119"
- var port = 1883
- opts := mqtt.NewClientOptions()
- opts.AddBroker(fmt.Sprintf("tcp://%s:%d", broker, port))
- opts.SetClientID("go_mqtt_client33")
- opts.SetUsername("emqx")
- opts.SetPassword("public")
- opts.SetDefaultPublishHandler(messagePubHandler)
- opts.OnConnect = connectHandler
- opts.OnConnectionLost = connectLostHandler
- client := mqtt.NewClient(opts)
- if token := client.Connect(); token.Wait() && token.Error() != nil {
- panic(token.Error())
- }
- // 开启另外一个线程协程去subsribe订阅
- go sub(client)
- publish(client)
-
- }
-
- func sub(client mqtt.Client) {
- topic := "topic/test"
- token := client.Subscribe(topic, 1, nil)
- token.Wait()
- fmt.Printf("Subscribed to topic %s", topic)
- }
-
- func publish(client mqtt.Client) {
- num := 100000
- for i := 0; i < num; i++ {
- text := fmt.Sprintf("message:{Temperature:101,Rh:%d}", i)
- token := client.Publish("topic/test", 0, false, text)
- token.Wait()
- time.Sleep(time.Second)
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。