繁体   English   中英

在Java中,Mqtt Pub-Sub的服务质量= 2

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM