gpt4 book ai didi

java - 如何在HiveMQ Client中获取客户端的QoS?

转载 作者:行者123 更新时间:2023-12-02 01:24:41 27 4
gpt4 key购买 nike

我正在使用 HiveMQ 客户端,我想知道是否有办法获得客户端订阅的服务质量 (QoS)(就特定主题或一般情况而言)?我会寻找一种可以在客户端上调用的方法,如下所示:

    Mqtt5BlockingClient subscriber = Mqtt5Client.builder()
.identifier(UUID.randomUUID().toString()) // the unique identifier of the MQTT client
.serverHost("localhost")
.serverPort(1883)
.buildBlocking();

subscriber.getQoS("topic") // returns the QoS of the subscriber is subscribing to the given topic

我只想要这些信息,以便我可以打印到控制台。

最佳答案

我认为您必须阅读更多有关 MQTT 概念的内容。服务质量 (QoS) 级别是消息发送者和接收者之间关于保证传递消息的协议(protocol)。因此,QoS 用于 publish()subscribe() 方法,而不是 connect()

这是场景:

<强>1。连接:
您必须使用用户名/密码将您的客户连接到任何经纪商。每个 mqtt 库都有一个 connect() 方法。在此步骤中,您尚未指定 qos。
连接成功后(每个 mqtt 库都有 connect 方法的回调),您可以发布或订阅任何所需(或允许)的主题。
示例:
Eclipse Paho library:

IMqttToken token = clientPhone.connect();

HiveMQ Library:

client.connect();
//or
client.connectWith().keepAlive(10).send();
//or
Mqtt5Connect connectMessage = Mqtt5Connect.builder().keepAlive(10).build();
client.connect(connectMessage);

<强>2。发布:
当你想要publish()一条消息时,你必须指定一个qos,以便broker按照这个qos响应客户端:

Qos=0:
Client ---- Publish method ----> broker
Qos=1:
Client ---- Publish method ----> broker
Client <---- PubAck callback ---- broker
Qos=2:
Client ---- Publish method ----> broker
Client <---- PubRec callback ---- broker
Client ---- PubRel method ----> broker
Client <---- PubComp callback ---- broker

示例:

Eclipse Paho library:

IMqttDeliveryToken tokenPub = clientPhone.publish(topicPub, message);

HiveMQ Library:

client.publishWith()
.topic("test/topic")
.qos(MqttQos.AT_LEAST_ONCE)
.payload("payload".getBytes())
.send();
//or:
Mqtt5Publish publishMessage = Mqtt5Publish.builder()
.topic("test/topic")
.qos(MqttQos.AT_LEAST_ONCE)
.payload("payload".getBytes())
.build();
client.publish(publishMessage);

<强>3。订阅:
SUBSCRIBE 消息可以包含客户端的任意数量的订阅。每个订阅都是一对主题和 QoS 级别。订阅消息中的主题还可以包含通配符,这使得订阅某些主题模式成为可能。如果一个客户端存在重叠订阅,则该主题的最高 QoS 级别获胜,并且代理将使用该级别来传递消息。
示例:

Eclipse Paho library:

IMqttToken subToken = MqttAndroidClientInstance.subscribe(topics, qos);

HiveMQ Library:

client.subscribeWith().topicFilter("test/topic").qos(MqttQos.EXACTLY_ONCE).send();
//or:
Mqtt5Subscribe subscribeMessage = Mqtt5Subscribe.builder()
.topicFilter("test/topic")
.qos(MqttQos.EXACTLY_ONCE)
.build();
client.subscribe(subscribeMessage);

编辑(1):
mqtt 客户端如果想重新连接后接收已订阅的主题,则必须使用以下参数:
A-cleanSession false连接。
B- 使用 QOS>0 订阅。

关于java - 如何在HiveMQ Client中获取客户端的QoS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57116316/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com