2016-06-03 5 views
0

Ich habe zwei Moskito-Broker auf PC1 (Mosquito v1.4.8) und PC2 (RabbitMQ v3.6.2 mit MQTT-Adapter) installiert.Wie kann Loopback-Veröffentlichung verhindert werden, wenn Mücken mit RabbitMQ MQTT überbrückt werden?

bei PC1 Bridging wie initiiert unter

sensor/room1/ <-> office/room1/ 

Aber ich bemerkte, dass es immer eine doppelte Nachricht wird veröffentlicht zurück, wenn die Brücke aktiv ist, bedeutet, dass all meine Anwendung (auf PC1), die auf das gleiche Thema abonniert werden empfängt die gleiche Nachricht zweimal. Welche Einstellung habe ich hier falsch gemacht?

PC1 mosquitto.conf

connection bridge-pc1-to-pc2 
address pc2-address.com 
topic room1/# both 2 sensor/ office/ 

bridge_protocol_version mqttv311 
notifications true 
cleansession true 
try_private false 

Loopback-Problem zu testen, ich PC1 Thema abonniert hatte bei PC1 sensor/#

mosquitto_sub -t sensor/# -v -d 

Dann veröffentliche ich eine Testnachricht

mosquitto_pub -t sensor/room1/temperature -m '{"value":27.3, "timestamp":"2016-06-03 14:02:38"}' 

Broker bei Cloud (PC2) hat die Nachricht korrekt empfangen (Nachricht erhalten) nur einmal)

Client mosqsub/3121-Dennis-iMa sending CONNECT 
Client mosqsub/3121-Dennis-iMa received CONNACK 
Client mosqsub/3121-Dennis-iMa sending SUBSCRIBE (Mid: 1, Topic: office/#, QoS: 0) 
Client mosqsub/3121-Dennis-iMa received SUBACK 
Subscribed (mid: 1): 0 
Client mosqsub/3121-Dennis-iMa received PUBLISH (d0, q0, r0, m0, 'office/room1/temperature', ... (14 bytes)) 
office/room1/temperature {"value":27.3, "timestamp":"2016-06-03 14:02:38"} 

Aber PC1 erhielt die gleiche Nachricht zweimal! Unten ist die Pi-Ausgabe

Received CONNACK 
Received SUBACK 
Subscribed (mid: 1): 0 
Received PUBLISH (d0, q0, r0, m0, 'sensor/room1/temperature', ... (14 bytes)) 
sensor/room1/temperature {"value":27.3, "timestamp":"2016-06-03 14:02:38"} 
Received PUBLISH (d0, q0, r0, m0, 'sensor/room1/temperature', ... (14 bytes)) 
sensor/room1/temperature {"value":27.3, "timestamp":"2016-06-03 14:02:38"} 

Warum gibt es Loopback veröffentlichte Nachricht und wie man das löst?

-Update 3. Juni 2016
Dies ist nicht die gleiche Frage mit diesem question, da es nicht die horizontale Skalierung mit sich bringt (1-zu-viele Makler)

+0

Mögliches Duplikat von [mqtt mosquitto Brücke horizontale Skalierung] (http://stackoverflow.com/questions/36283197/mqtt-mosquitto-bridge-horizontal-skalierung) – hardillb

+0

@hardillb Dies ist nicht die gleiche Frage mit dieser Frage, als es geht nicht um horizontale Skalierung (1-zu-viele Makler) – Dennis

Antwort

1

ändern try_private false zu try_private true. Genau dafür ist es gedacht. Wenn Kaninchen dieses Feature nicht unterstützt (es ist derzeit nicht in der Spezifikation, aber weit verbreitet), dann haben Sie kein Glück.

+0

Ich versuchte, es funktioniert, wenn beide Makler sind Moskitos, aber es funktioniert nicht für Mücke + RabbitMQ – Dennis

0

RabbitMQ unterstützt try_private nicht und weiß nichts über die Brücke. So werden Nachrichten, die in RabbitMQ an office/* veröffentlicht wurden, zurück an abonnierte Moskitos gesendet, ohne irgendwelche private Flags zu berücksichtigen. Um Zyklen zu entfernen, können Sie verschiedene Themennamen für eingehende und ausgehende Verbindungen verwenden oder zwei Mosquitto-Server verwenden.

+0

Änderung meiner Topic-Struktur wird eine Menge Arbeit jetzt sein. Ich wähle zunächst RabbitMQ, weil es kostenlos ist und Cloud-Clustering unterstützt. Kennen Sie eine andere Marke, die das gleiche kann? – Dennis

Verwandte Themen