微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HiveMQ MQTT 客户端:订阅多个主题

如何解决HiveMQ MQTT 客户端:订阅多个主题

我正在尝试使用 HiveMQ 客户端订阅多个主题This page 建议 MQTT 订阅消息可以携带多个订阅

我尝试了这段代码,但它只订阅了最后一个主题(在本例中为 Topic2

val mqttClient: Mqtt3Asyncclient

// Client instantiation ommited for brevity

mqttClient.subscribeWith()
    .topicFilter("Topic1")
    .topicFilter("Topic2")
    .callback(::onMessageReceived)
    .send()

如果可能,我希望避免发送多个单独的订阅

解决方法

您是对的,MQTT 订阅有效负载包含 "a list of Topic Filters indicating the Topics to which the Client wants to subscribe"。因此,理论上,您可以通过一次调用订阅多个主题。

通过一次调用订阅多个主题会使错误处理变得困难(如果一个订阅成功而另一个订阅失败是错误吗?)所以一些库可能不支持这一点,而其他库则为单个主题订阅提供简化的语法。在 hive-mqtt-client(我假设您正在使用)中调用 topicFilter() overrides any existing filter 以便您订阅指定的最后一个主题。

在一次通话中订阅多个主题已经讨论过 in the forum 并且似乎有多种方法可以实现这一点(参见 this issuethis PR)。来自论坛的示例代码如下(我没有测试过):

mqtt3AsyncClient.subscribeWith()
.addSubscription().topicFilter(“tenant1/topic”).qos(MqttQos.AT_LEAST_ONCE).applySubscription()
.addSubscription().topicFilter(“tenant2/topic”).qos(MqttQos.AT_LEAST_ONCE).applySubscription()
.callback(e -> {})
.send();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。