golang mqtt

test:

package main

import (
    "log"
    "github.com/eclipse/paho.mqtt.golang"
    "github.com/gin-gonic/gin"
    "github.com/influxdata/influxdb/uuid"
    "github.com/json-iterator/go"
    "github.com/rs/zerolog/log"
    "mercury/common/common_configs"
    "mercury/core/signals"
    "mercury/plugins"
    "net/url"

)

func main() {

}

type Plugin struct {
    conn mqtt.Client
}

func (m *Plugin) RegisterRouter(engine *gin.Engine) {}

func (m *Plugin) Initialize() error {
    m.conn = mqtt.NewClient(mqttOption())
    if token := m.conn.Connect(); token.Wait() && token.Error() != nil {
        return token.Error()
    }

    m.conn.Subscribe("fake_tengqing_opc", 2, func(client mqtt.Client, message mqtt.Message) {
        println(string(message.Payload()))
    })
    return nil
}

func mqttOption() *mqtt.ClientOptions {
    opt := mqtt.NewClientOptions()
    u, err := url.Parse("tcp://username:password@ip:1883/....")
    if err != nil {
        log.Panic(err)
    }
    opt.AddBroker("tcp://" + u.Host)
    opt.SetUsername(u.User.Username())
    if pw, ok := u.User.Password(); ok {
        opt.SetPassword(pw)
    }
    opt.SetClientID(uuid.TimeUUID().String())
    return opt
}

 

test:

package mqtt_publish

import (
    "github.com/eclipse/paho.mqtt.golang"
    "github.com/gin-gonic/gin"
    "github.com/influxdata/influxdb/uuid"
    "github.com/json-iterator/go"
    "github.com/rs/zerolog/log"
    "mercury/common/common_configs"
    "mercury/core/signals"
    "mercury/plugins"
    "net/url"
)

type Plugin struct {
    conn mqtt.Client
}

func (m *Plugin) RegisterRouter(engine *gin.Engine) {}

func (m *Plugin) Initialize() error {
    m.conn = mqtt.NewClient(mqttOption())
    if token := m.conn.Connect(); token.Wait() && token.Error() != nil {
        return token.Error()
    }
    go func() {
        for msg := range signals.GlobalOriginDispatcher.Subscribe() {
            s, err := jsoniter.MarshalToString(msg.ParsedData)
            if err != nil {
                log.Error().Err(err)
                continue
            }
            if err := m.conn.Publish(msg.Name, 2, true, s).Error(); err != nil {
                log.Error().Err(err)
            }
        }
    }()

    m.conn.Subscribe("fake_tengqing_opc", 2, func(client mqtt.Client, message mqtt.Message) {
        println(string(message.Payload()))
    })
    return nil
}
func init() {
    plugins.Plugins["mqtt_publish"] = &Plugin{}
}

func mqttOption() *mqtt.ClientOptions {
    opt := mqtt.NewClientOptions()
    u, err := url.Parse(common_configs.OutputMqttServerUrl)
    if err != nil {
        log.Panic().Err(err)
    }
    opt.AddBroker("tcp://" + u.Host)
    opt.SetUsername(u.User.Username())
    if pw, ok := u.User.Password(); ok {
        opt.SetPassword(pw)
    }
    opt.SetClientID(uuid.TimeUUID().String())
    return opt
}
View Code

 

posted @ 2018-10-30 23:07  静静别跑  阅读(960)  评论(0)    收藏  举报