EdgexAgent/device-ble-go/pkg/mqttbus/mqttClient.go
2025-07-10 20:40:32 +08:00

75 lines
2.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package mqttbus
import (
"device-ble/cmd/config"
"device-ble/pkg/messagebus"
"fmt"
"time"
"github.com/edgexfoundry/go-mod-core-contracts/v4/clients/logger"
"github.com/edgexfoundry/go-mod-messaging/v4/pkg/types"
)
// EdgexMessageBusClient 实现 interfaces.MessageBusClient
// handler 通过参数传递logger 也通过参数传递
type EdgexMessageBusClient struct {
client *messagebus.Client
}
// NewEdgexMessageBusClient 只负责初始化和连接,不注册 handler
func NewEdgexMessageBusClient(cfg *config.MQTTUserClientConfig, logger logger.LoggingClient) (*EdgexMessageBusClient, error) {
config := messagebus.Config{
Host: cfg.MqttUserConfig.Host,
Port: cfg.MqttUserConfig.Port,
Protocol: cfg.MqttUserConfig.Protocol,
Type: "mqtt",
ClientID: cfg.MqttUserConfig.ClientID,
QoS: cfg.MqttUserConfig.QoS,
Username: cfg.MqttUserConfig.Username,
Password: cfg.MqttUserConfig.Password,
}
client, err := messagebus.NewClient(config, logger)
if err != nil {
return nil, fmt.Errorf("创建MessageBus客户端失败: %w", err)
}
if err := client.Connect(); err != nil {
return nil, fmt.Errorf("连接MessageBus失败: %w", err)
}
return &EdgexMessageBusClient{client: client}, nil
}
// Subscribe 注册 handler
func (e *EdgexMessageBusClient) Subscribe(topic1 string, handler func(topic2 string, envelope types.MessageEnvelope) error) error {
// 装饰器:后期可以在不修改远程包的基础上自定义该函数
wrappedHandler := func(topic string, envelope types.MessageEnvelope) error {
// 加日志确认是否被调用
fmt.Printf("wrappedHandler被调用: topic=%s\n", topic)
return handler(topic, envelope)
}
if err := e.client.Subscribe(topic1, wrappedHandler); err != nil {
return fmt.Errorf("订阅主题失败: %w", err)
}
return nil
}
func (e *EdgexMessageBusClient) Publish(topic string, data interface{}) error {
return e.client.Publish(topic, data)
}
func (e *EdgexMessageBusClient) SubscribeResponse(topic string) error {
return e.client.SubscribeResponse(topic)
}
func (e *EdgexMessageBusClient) Request(topic string, data interface{}) (types.MessageEnvelope, error) {
return e.client.Request(topic, data)
}
func (e *EdgexMessageBusClient) SetTimeout(timeout time.Duration) {
e.client.SetTimeout(timeout)
}
func (e *EdgexMessageBusClient) Disconnect() error {
return e.client.Disconnect()
}