首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用paho.mqtt.golang库订阅多个MQTT主题?

如何使用paho.mqtt.golang库订阅多个MQTT主题?
EN

Stack Overflow用户
提问于 2018-05-22 13:33:06
回答 1查看 3.8K关注 0票数 0

我试图连接到运行在外部服务器上的MQTT代理,在那里我需要处理多个不同的主题。问题是,即使主题与作为参数传递给方法的主题不匹配,也只有最后一个订阅处理程序被称为

示例:向p1/test发送任何内容的将触发registrationHandler,该registrationHandler只应侦听“P1/控制器/注册”。其他处理程序或DefaultPublishHandler从未被调用。

我的程序的一个简化版本:

代码语言:javascript
复制
func main(){
    var opts = MQTT.NewClientOptions()
    opts.AddBroker(address)
    opts.SetClientID("go-controller")

    opts.SetDefaultPublishHandler(func(client MQTT.Client, msg MQTT.Message) {
        log.Printf("topic: %s\n", msg.Topic())
    })

    client = MQTT.NewClient(opts)
    if token := client.Connect(); token.Wait() && token.Error() != nil {
        log.Panicln(token.Error())
    }

    client.Subscribe("P1/#", 0, logHandler)
    client.Subscribe("P1/controller/registration", 0, registrationHandler)
}

var logHandler MQTT.MessageHandler = func(client MQTT.Client, msg MQTT.Message) {
    ...
    log.Printf("Topic %s logged...\n", msg.Topic())
}

var registrationHandler MQTT.MessageHandler = func(client MQTT.Client, msg MQTT.Message) {
    ...
    log.Printf("Topic %s registered...\n", message.Value)
}

编辑#1

我发现订阅主题很重要。当我交换两个订阅调用时,将调用正确的处理程序。

EN

回答 1

Stack Overflow用户

发布于 2018-05-22 14:04:30

对于paho.mqtt.python实现,一个客户端可以订阅多个订阅,一个调用在数组中进行,如下所示

代码语言:javascript
复制
client.subscribe([("P1/#", 0),("P1/controller/registration", 0)])

它对数组中项的顺序不敏感。这与“golang”语言的实现无关,但我将其留在这里以供参考。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50469066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档