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

时间:2013-11-29 08:29:37

标签: java network-programming zeromq mqtt

我对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();
        }
    }
}

2 个答案:

答案 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