当订阅失败时,go客户端返回nil


if token := c.Subscribe("go-mqtt/sample", 0, nil); token.Wait() && token.Error() != nil {
fmt.Println(token.Error()) 
os.Exit(1)
}

EMQ服务器返回reasonCode=128,go客户端的错误始终为零,我们无法获取EMQ服务器的子包。

根据ALSM对您最初评论的paho.mqt.golang问题的评论:

是的,这是一个有趣的订阅,订阅中可以有多个主题,子包在一个响应中为每个主题返回成功/错误。让客户端检测子包中的所有响应代码是否都失败并在令牌上设置错误很简单,但在成功和失败混合的情况下该怎么办就不太清楚了。这是一个悬而未决的问题,欢迎有任何想法。

库采用的方法是将已处理的订阅请求(发送了SUBSCRIBE,接收了SUBACK(视为成功。如果您愿意,它可以让您选择检查对单个订阅的响应(但如果有1个请求失败,则不会引发错误响应(。正如ALSM所评论的那样,很可能有更好的方法来解决这一问题(欢迎提出建议(。

你表示这对你不起作用,但没有在这里提供任何额外的信息(按要求(,所以很难知道你在做什么。这里有一种方法可以给你大致的想法(尚未编译/测试(:

token := c.Subscribe("go-mqtt/sample", 0, nil)
if token.Wait() && token.Error() != nil {
fmt.Println(token.Error()) 
os.Exit(1)
} 
if t, ok := token.(*mqtt.SubscribeToken); ok {
subResult = t.Result() 
rc := subResult["go-mqtt/sample"]
fmt.Println("SUBACK response: ", rc) 
} else {
fmt.Println("unexpected token type") 
os.Exit(1)
}

最新更新