2016-04-26 12 views
0

Mit dem Mosquitto-Broker habe ich einen einzigen Publisher, der manchmal doppelte Nachrichten an verschiedene Clients senden kann. Die Clients sind Geräte, die nicht immer online sind. Wenn sie eine Verbindung mit dem Broker herstellen, müssen sie in der Lage sein, alle Nachrichten abzurufen, die beibehalten wurden. Was wir beobachten, ist, dass, wenn der Client verbunden ist, alle Nachrichten durchfließen, aber wenn er die Verbindung trennt und dann wieder verbindet, kommt nur das späteste aller Duplikate der Nachrichten an.Gibt es eine Mosquitto-Einstellung, um doppelte Nachrichten zu behalten?

Unsere Einstellungen sind Qos 1 und retain = true. Die Einstellung conf hat keine allow_duplicate_messages, daher ist der Standardwert wahr.

Gibt es etwas, was wir tun können, um alle Nachrichten behalten zu können?

Antwort

1

Sie verwechseln gespeicherte Nachrichten für persistente Sitzungen.

Nur die letzte mit dem beibehaltenen Bitsatz veröffentlichte Nachricht wird zugestellt, wenn der Client die Verbindung normal wieder herstellt.

Wenn Sie ALLE Nachrichten senden möchten (unabhängig davon, ob das beibehaltene Bit gesetzt ist), während der Client offline ist, müssen Sie Persistent Sessions verwenden.

Sie mit der clean_session Verbindung Option auf false beiden Male eingestellt verbinden müssen Sie (die anfängliche Verbindung und die Reconnect) anschließen:

Eine detaillierte Beschreibung der permanenten Sitzungen kann here aber die kurze Version ist wie folgt zu finden

+1

Sie müssen auch die gleiche Client-ID verwenden, wenn Sie die Verbindung wiederherstellen. – ralight