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 }
浙公网安备 33010602011771号