我有一个客户端使用cleansession=true
与我的MQTT服务器(RabbitMQ)创建了一个会话并订阅了一个主题。当我将代码更改为cleansession=false
并重新启动客户端时,它遇到了无法连接的问题(使用Paho在Golang上)。但是,当我使用不同的clientId创建新会话时,一切正常。我可以重新创建此错误,只有在我尝试更改clientId的cleansession
值时才会出错。
我没有在MQTT文档中看到任何内容,说客户端在后续连接期间无法更改其cleanState值。有这样的问题吗?
我的客户代码: 包主要
import (
"fmt"
mqtt "git.eclipse.org/gitroot/paho/org.eclipse.paho.mqtt.golang.git"
)
var mqttFunc mqtt.MessageHandler = func(client *mqtt.Client, msg mqtt.Message) {
fmt.Printf("Topic: %s\n", msg.Topic())
fmt.Printf("Msg: %s\n", msg.Payload())
}
func main() {
opts := mqtt.NewClientOptions().AddBroker("tcp://localhost:1883/")
opts.SetClientID("clientE")
opts.SetDefaultPublishHandler(mqttFunc)
// This is the line I change
opts.SetCleanSession(false)
c := mqtt.NewClient(opts)
token := c.Connect()
if token.Wait() && token.Error() != nil {
panic(token.Error())
}
token = c.Subscribe("together/example1", 1, nil)
if token.Wait() && token.Error() != nil {
fmt.Println(token.Error())
panic(1)
}
forever := make(chan bool)
<-forever
}
运行客户端时出错:
panic: Network Error : %!s(<nil>)
goroutine 16 [running]:
runtime.panic(0x28b700, 0xc208000dc0)
/usr/local/go/src/pkg/runtime/panic.c:279 +0xf5
main.main()
/Users/Foo/Work/Go/src/github.com/bar/rabbitmq/tutorial/mqtt_receiver.go:23 +0x149
goroutine 19 [finalizer wait]:
runtime.park(0x14bb0, 0x4910d0, 0x48fbc9)
/usr/local/go/src/pkg/runtime/proc.c:1369 +0x89
runtime.parkunlock(0x4910d0, 0x48fbc9)
/usr/local/go/src/pkg/runtime/proc.c:1385 +0x3b
runfinq()
/usr/local/go/src/pkg/runtime/mgc0.c:2644 +0xcf
runtime.goexit()
/usr/local/go/src/pkg/runtime/proc.c:1445
goroutine 17 [syscall]:
runtime.goexit()
/usr/local/go/src/pkg/runtime/proc.c:1445
exit status 2