Subscription identifier

Clients können beim Anlegen einer Subscription einen sogenannten Subscription Identifier angeben. Der Message Broker speichert dann intern ein Mapping zwischen dieser Subscription und dem jeweiligen Identifier. Sobald eine Nachricht vom Broker an den Client gesendet wird, wird der Subscription Identifier mit an den Client übertragen. Der Client hat dann die Möglichkeit, die Nachricht intern anhand des Subscription Identifiers zuzuordnen. Das folgende Schaubild verdeutlicht diesen Zusammenhang nochmals:

Subscription identifier 1:

In diesem Beispiel erstellt der MQTT-Client auf der linken Seite vier Subscriptions, jeweils auf teilweise „überlappende“ Topics mit Hilfe von Wildcards. Nun published der rechte MQTT Client eine Nachricht auf dem Topic /car/red/convertible.

Nun gibt es zwei Möglichkeiten:

  1. Unoptimierte Variante: Der Subscriber erhält drei MQTT Nachrichten (Publishes) vom Broker. Jede Nachricht enthält den jeweiligen Subscription Identifier. In der TwinCAT SPS würden auf Basis unseres Samples IotMqttv5Sample somit drei Nachrichten in der Message Queue landen. Beispiel-Screenshot aus Wireshark beim Empfang der drei Nachrichten:
    Subscription identifier 2:
    Der Mosquitto Broker in der Version 2.0.15 verwendet standardmäßig diese Form der Übertragung.
  2. Der Subscriber enthält nur eine MQTT Nachricht vom Broker, wobei diese Nachricht eine Liste mit Subscription Identifier enthält. In obigem Beispiel also die Identifier 1, 2 und 3. In der TwinCAT SPS würde in diesem Fall nur eine Nachricht in der Message Queue landen. Diese Nachricht enthält dann ein Array der Subscription Identifier. Beispiel-Screenshot aus Wireshark beim Empfang der Nachricht:
    Subscription identifier 3:
    Subscription identifier 4:

Der HiveMQ CE Broker in der Version 2023.3 verwendet standardmäßig diese Form der Übertragung.

Beide Übertragungsarten sind laut MQTT-Spezifikation zulässig.