Doppelte Nachrichten, die empfangen werden, wenn mehrere Abonnements mit eingehender Nachricht übereinstimmenJava

Java-Forum
Guest
 Doppelte Nachrichten, die empfangen werden, wenn mehrere Abonnements mit eingehender Nachricht übereinstimmen

Post by Guest »

getestet mit PAHO Version 1.2.5
In diesem Beispiel sende ich eine Nachricht an das Ziel "root/msg/1/data". Ich habe zwei Abonnements: "root/msg/1/#" und "root/msg/+/#". Beide Abonnements stimmen mit der an "root/msg/1/data" gesendeten Nachricht überein. Ich erwartete, dass der Message -Hörer für jedes Abonnement einmal aufgerufen wird. Zu meiner Überraschung wurde der Message-Hörer für jedes Abonnement zweimal aufgerufen.

Code: Select all

public class MqttPahoExample {

public static void main(String[] args) throws MqttException {
MqttConnectionOptionsBuilder builder = new MqttConnectionOptionsBuilder();
MqttConnectionOptions mqttConnectionOptions = builder.automaticReconnect(true)
.username("user")
.password("password".getBytes())
.cleanStart(false)
.requestResponseInfo(true)
.build();
mqttConnectionOptions.setSendReasonMessages(false);

MqttClient mqttClient = new MqttClient("tcp://localhost:61616", "Client-01");
mqttClient.connect(mqttConnectionOptions);

// Two subscriptions, both will match the incoming data
MqttSubscription mqttSubscription1 = new MqttSubscription("root/msg/1/#", 2);
MqttSubscription mqttSubscription2 = new MqttSubscription("root/msg/+/#", 2);
IMqttMessageListener iMqttMessageListener = (topic, message1) ->
System.out.println("topic:" + topic + "  message:" + new String(message1.getPayload(), StandardCharsets.UTF_8) + " id:" + message1.getId());

MqttSubscription[] mqttSubscriptions = {mqttSubscription1, mqttSubscription2};
IMqttMessageListener[] mqttMessageListeners = {iMqttMessageListener, iMqttMessageListener};
mqttClient.subscribe(mqttSubscriptions, mqttMessageListeners);

// Publish message
MqttMessage message = new MqttMessage("TestMessage".getBytes());
message.setQos(2);
mqttClient.publish("root/msg/1/data", message);
}
}
< /code>
Erwartete Ausgabe < /p>
topic:root/msg/1/data  message:TestMessage id:1
topic:root/msg/1/data  message:TestMessage id:1
< /code>
Tatsächliche Ausgabe < /p>
topic:root/msg/1/data  message:TestMessage id:2
topic:root/msg/1/data  message:TestMessage id:2
topic:root/msg/1/data  message:TestMessage id:1
topic:root/msg/1/data  message:TestMessage id:1

Ich hatte erwartet, 1 Nachricht für jedes Abonnement zu erhalten.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post