我对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();
}
}
}
答案 0 :(得分:2)
QOS 2表示每个订阅者只会收到任何给定邮件的 1 副本。
这与QOS 1不同,在QOS 1中,订户可能会收到同一消息的多个副本,因为代理确保消息已传递。
QOS级别不会以任何方式改变有多少订阅者会看到消息。
答案 1 :(得分:1)
根据您使用的MQTT消息传递提供程序,您应该能够跨多个订阅者共享主题订阅,以便只有一个订阅者接收每条消息。在这种情况下,消息传递提供程序处理在所有订户之间事件分发工作负载。
这称为共享订阅,您可以在此处阅读有关IBM MessageSight产品的工作原理的更多信息:http://pic.dhe.ibm.com/infocenter/ism/v1r0m0/topic/com.ibm.ism.doc/Overview/ov30010.html