Gibt es eine Möglichkeit, die MQTT-QoS-Ebene beizubehalten, bis sie den Client erreicht?


9

Mit MQTT können Absender eine QoS-Stufe ( Quality of Service ) festlegen , die bestimmte Garantien dafür bietet, ob eine Nachricht empfangen wird (und ob Duplikate zulässig sind). Dieser Artikel von HiveMQ hebt das Problem des Downgrades hervor , bei dem ein Client mit einer niedrigeren QoS-Stufe die Nachricht nicht mit den Garantien erhält, die der Absender angefordert hat:

Wie bereits erwähnt, sind die QoS-Flüsse zwischen einem Veröffentlichungs- und einem Abonnement-Client zwei verschiedene Dinge, und die QoS kann unterschiedlich sein. Dies bedeutet, dass sich die QoS-Ebene von Client A, der eine Nachricht veröffentlicht, und Client B, der die veröffentlichte Nachricht empfängt, unterscheiden kann. Zwischen dem Absender und dem Broker wird die QoS vom Absender definiert. Wenn der Broker die Nachricht an alle Abonnenten sendet, wird die QoS des Abonnements von Client B verwendet.

Does MQTT bieten eine Möglichkeit , darauf hinweist , dass diese Herabstufung nicht akzeptabel ist, und dass die Nachricht muss geliefert werden , um den ursprünglichen Absender angeforderten QoS verwenden? Ist die einzige Option, um sicherzustellen, dass sowohl der Sender als auch der Empfänger die gewünschte QoS-Einstellung haben, bevor die Nachricht gesendet wird?

Antworten:


8

Bei der Arbeit mit MQTT ist zu beachten, dass "sowohl Abonnenten als auch Herausgeber als MQTT-Clients gelten".

Wie bereits erwähnt, bezieht sich die beim Veröffentlichen festgelegte QoS vollständig auf den Broker (B) und nicht auf die anderen Clients. Um sicherzustellen, dass Abonnent (S) alles empfängt, was Publisher (P) veröffentlicht, muss QoS 1 verwendet werden.

Schauen wir uns die Fälle an: P - sendet mit QoS 0, was bedeutet, dass jede Nachricht höchstens einmal (einmal oder null) bei B ist. In diesem Fall, wenn S B mit QoS 0 abonniert, gibt es keine Garantie dafür, dass selbst wenn der Broker (B) eine Nachricht empfängt, die schließlich S erreichen wird. QoS 1 - S empfängt definitiv QoS 2 - S empfängt nicht mehrere Nachrichten, solange der Broker dies kann

Wenn wir dasselbe mit anderen QoS machen. Wir werden QoS1 für Abonnenten kennenlernen, das auf allen Ebenen gut funktioniert, da QoS 1 eine Obermenge von allen ist.


MQTT liefert keine Angabe dafür, aber wir können die QoS des Absenders erreichen, indem wir beim Abonnieren QoS 1 verwenden.


4

QoS 1 oder 2-Ebenen stellen nur sicher, dass die veröffentlichte Nachricht beim Broker eingetroffen ist. Die Teilnehmer-QoS 1 oder 2 versichert dem Broker, dass die Nachricht empfangen wurde.

Veröffentlichen mit 1 oder 2 bedeutet nicht, dass jemand zuhört.

Was ist Ihr Anwendungsfall?


3
Stellen Sie keine Fragen in Antworten. Wenn etwas nicht klar ist, hinterlasse zuerst einen Kommentar.
Bence Kaulics

Ich bin gespannt auf Situationen, in denen ein Sensor möglicherweise Daten an den Nachrichtenbroker sendet und dann an einen Computer oder einen anderen Prozessor weitergeleitet wird, bei dem es wichtig ist, dass die QoS-Garantien eingehalten werden.
Aurora0001
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.