Go 服务器上重新启动mqtt服务不工作

Go 服务器上重新启动mqtt服务不工作,go,mqtt,Go,Mqtt,我已经编写了类似以下内容的mqtt.go文件: // Publisher sends a message to an MQTT broker type Publisher interface { Publish(topic string, qos byte, retained bool, payload interface{}) mqtt.Token } // PublisherImpl implements sending messages into a broker type Pu

我已经编写了类似以下内容的
mqtt.go
文件:

// Publisher sends a message to an MQTT broker
type Publisher interface {
    Publish(topic string, qos byte, retained bool, payload interface{}) mqtt.Token
}

// PublisherImpl implements sending messages into a broker
type PublisherImpl struct {
    mqtt.Client
}

// Subscriber consumer of MQTT topic(s)
type Subscriber interface {
    Subscribe(topic string, handler handler.Handler)
    Disconnect(wait uint)
}

// SubscriberImpl implements sending messages into a broker
type SubscriberImpl struct {
    client mqtt.Client
}

// Disconnect closes connection to broker
func (s *SubscriberImpl) Disconnect(wait uint) {
    s.client.Disconnect(wait)
}

// Subscribe creates a new subscription to a handler
func (s *SubscriberImpl) Subscribe(topic string, handler handler.Handler) {
    go func() {
        token := s.client.Subscribe(topic, 0, handler.Handle)
        if token.Error() != nil {
            log.Println(token.Error())
        }
    }()
}

// NewPublisher Create new MQTT publisher instance
func NewPublisher(clientID string, uri string) Publisher {
    parsedURI := parseURI(uri)
    client := connect(clientID, parsedURI)
    return &PublisherImpl{
        client,
    }
}

// NewSubscriber Create new MQTT subscriber instance
func NewSubscriber(clientID string, uri string) Subscriber {
    parsedURI := parseURI(uri)
    client := connect(clientID, parsedURI)
    return &SubscriberImpl{
        client,
    }
}

func connect(clientID string, uri *url.URL) mqtt.Client {
    opts := createClientOptions(clientID, uri)
    client := mqtt.NewClient(opts)
    token := client.Connect()
    for !token.WaitTimeout(3 * time.Second) {
    }
    if err := token.Error(); err != nil {
        log.Fatal(err)
        panic(err)
    }
    return client
}

func createClientOptions(clientID string, uri *url.URL) *mqtt.ClientOptions {
    opts := mqtt.NewClientOptions()
    opts.AddBroker(fmt.Sprintf("tcp://%s", uri.Host))
    opts.SetUsername(uri.User.Username())
    password, _ := uri.User.Password()
    opts.SetPassword(password)
    opts.SetClientID(clientID)
    return opts
}

func parseURI(uriString string) *url.URL {
    url, err := url.Parse(uriString)
    if err != nil {
        panic(err)
    }
    return url
}
但是当我更新了服务器上的代码,然后服务器重新启动时,这就不起作用了,即使接收到发布数据,但
Mqtt
事情也不起作用。也许我在这里遗漏了一些东西,比如重新启动时,我需要检查客户端是否未正确关闭,也许?或者是我遗漏了什么,让它无法运行


我是一个新手,如果有任何问题,请忽略。

您需要提供更多信息(例如,您何时调用
SubscriberImpl.Subscribe
-通常这将在
OnConnect
中,但您没有设置)。理想情况下,提供一个(精确的代码,而不是“类似这样的东西”)。日志可以帮助您查看正在发生的事情(代理和日志)