|
@@ -3,6 +3,9 @@ package mqtt2
|
|
|
import (
|
|
|
"fmt"
|
|
|
"kpt-pasture/config"
|
|
|
+ "sync"
|
|
|
+
|
|
|
+ "go.uber.org/dig"
|
|
|
|
|
|
"gitee.com/xuyiping_admin/pkg/di"
|
|
|
"gitee.com/xuyiping_admin/pkg/logger/zaplog"
|
|
@@ -12,12 +15,19 @@ import (
|
|
|
|
|
|
var Module = di.Options(di.Provide(NewServer))
|
|
|
|
|
|
-type MqttServer struct {
|
|
|
+type MqttClient struct {
|
|
|
+ dig.In
|
|
|
Client golangMqtt.Client
|
|
|
- Conf *config.MqttSetting
|
|
|
+ mx sync.Mutex
|
|
|
+}
|
|
|
+
|
|
|
+type MqttServer interface {
|
|
|
+ Consumer(top string, qos, workNumber int32) <-chan []byte
|
|
|
+ Producer(top string, qos int32, data []byte) error
|
|
|
+ Close()
|
|
|
}
|
|
|
|
|
|
-func NewServer(conf config.MqttSetting) *MqttServer {
|
|
|
+func NewServer(conf config.MqttSetting) *MqttClient {
|
|
|
opts := golangMqtt.NewClientOptions()
|
|
|
opts.AddBroker(fmt.Sprintf("tcp://%s:%d", conf.Broker, conf.Port))
|
|
|
opts.SetClientID(conf.ClientId)
|
|
@@ -32,8 +42,7 @@ func NewServer(conf config.MqttSetting) *MqttServer {
|
|
|
if token := client.Connect(); token.Wait() && token.Error() != nil {
|
|
|
panic(token.Error())
|
|
|
}
|
|
|
-
|
|
|
- return &MqttServer{Client: client}
|
|
|
+ return &MqttClient{Client: client}
|
|
|
}
|
|
|
|
|
|
var messagePubHandler golangMqtt.MessageHandler = func(client golangMqtt.Client, msg golangMqtt.Message) {
|
|
@@ -47,3 +56,11 @@ var connectHandler golangMqtt.OnConnectHandler = func(client golangMqtt.Client)
|
|
|
var connectLostHandler golangMqtt.ConnectionLostHandler = func(client golangMqtt.Client, err error) {
|
|
|
zaplog.Info("connectLost", zap.Any("err", err.Error()))
|
|
|
}
|
|
|
+
|
|
|
+func (s *MqttClient) Close() {
|
|
|
+ s.mx.Lock()
|
|
|
+ defer s.mx.Unlock()
|
|
|
+ if s.Client.IsConnected() {
|
|
|
+ s.Client.Disconnect(250)
|
|
|
+ }
|
|
|
+}
|