[英]Mqtt Pub-Sub with Quality of Service=2 in java
我对QoS = 2设置有一些疑问。
Mqtt发布者 - 订阅者使用Qos = 2。 据我所知,通过设置Qos = 2可以避免订阅者之间的消息传递重复。 在发布商中,我设置了Qos = 2。 我有两个订阅者听同一个TOPIC。 我的代码运行正常,但两个订阅者都收到相同的消息。
通过设置Qos = 2只有一个用户可以正确收到消息?
如何解决这个问题?
public class PubSync {
public static void main(String[] args) {
try {
MqttClient client = new MqttClient(TCPAddress,MqttClient.generateClientId());
MqttTopic topic = client.getTopic(MYTOPIC);
MqttMessage message = new MqttMessage(msg.getBytes());
message.setQos(2);
client.connect();
MqttDeliveryToken token = topic.publish(message);
token.waitForCompletion();
client.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
QOS 2表示每个订户只能收到任何给定消息的1份副本。
这与QOS 1不同,在QOS 1中,订户可能会收到同一消息的多个副本,因为代理确保传递消息。
QOS级别不会以任何方式改变有多少订阅者将看到消息。
根据您使用的MQTT消息传递提供程序,您应该能够跨多个订阅者共享主题订阅,以便只有一个订阅者接收每个消息。 在这种情况下,消息传递提供程序处理在所有订户之间事件分发工作负载。
这称为共享订阅,您可以在此处阅读有关它在IBM的MessageSight产品中的工作原理的更多信息: http : //pic.dhe.ibm.com/infocenter/ism/v1r0m0/topic/com.ibm.ism.doc/Overview /ov30010.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.