Я пытаюсь подключиться к брокеру MQTT, работающему на внешнем сервере, где мне нужно обрабатывать несколько разных тем.Проблема в том, что только последний подписанный обработчик называется , даже если тема не соответствует теме, переданной в качестве параметра методу Subscribe()
.
Пример: отправка любого контента на p1/test
запускает регистратор регистрации, который должен только прослушивать « P1 / controller / registration ».Другие обработчики или DefaultPublishHandler никогда не вызываются.
Упрощенная версия моей программы:
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)
}
EDIT # 1
Я обнаружилчто вопрос подписки на темы имеет значение.Когда я переставляю обе подписки, меняются правильные обработчики.