如何在节点js上动态填充MQTT主题列表

问题描述

我正在使用mqtt-node来获取订阅的消息。但是问题是要订阅主题列表将通过API附加。但是,在订阅其他主题时,mqtt连接不会读取附加的主题列表。请提出建议或提出解决此问题的合适方法

解决方法

没有主题列表。

发现正在使用的主题的唯一方法是维护代理外部的列表或订阅通配符,然后查看发布了什么消息。

重要的是要记住,主题仅在将消息发布给某个消息时才真正存在。订阅者提供了模式列表(它们可以包含+#之类的通配符)以与发布的主题相匹配,并且会发送任何匹配的消息。

,

您维护一系列主题

var topics = [
  "test/1","test/2","test/3"
]

通过API到达新主题时,您需要先取消订阅现有主题

client.unsubscribe(topics)

然后添加新主题

topics.push(newTopic)

然后重新订阅

client.subscribe(topics)

当我有这个用例时,这对我来说是最有效的。

请记住,在取消订阅和重新订阅之间的时间,消息可能会被发布,并且由于当时未订阅,您的客户端将看不到它们。如果您可以在Publishers上使用RETAIN字段,则很容易克服。但是在某些情况下,这不切实际。