Benutzereigenschaften – MQTT 5.0 Neue Funktionen

MQTT v5 hat viele neue Funktionen. Wir werden versuchen, diese Funktionen auf leicht verständliche Weise zu zeigen und die Auswirkungen dieser Funktionen auf Entwickler zu erörtern. Bisher haben wir diese besprochen Neue Funktionen von MQTT v5. Heute werden wir weiter diskutieren: Benutzereigenschaften.

Was sind Benutzereigenschaften?

Benutzereigenschaften sind die benutzerdefinierten Eigenschaften, die es Benutzern ermöglichen, ihre Metadaten zu MQTT-Nachrichten hinzuzufügen und zusätzliche benutzerdefinierte Informationen zu übertragen, um weitere Anwendungsszenarien zu erweitern.

Benutzereigenschaften bestehen aus einem benutzerdefinierten UTF-8-Schlüssel/Wert-Paar-Array, das im Nachrichteneigenschaftsfeld konfiguriert ist. Solange die maximale Nachrichtengröße nicht überschritten wird, kann eine unbegrenzte Anzahl von Benutzereigenschaften verwendet werden, um Metadaten zur MQTT-Nachricht hinzuzufügen und Informationen zwischen Herausgebern, MQTT-Brokern und Abonnenten zu übertragen.

Wenn Sie mit dem HTTP-Protokoll vertraut sind, ist diese Funktion dem Konzept des HTTP-Headers sehr ähnlich. Benutzereigenschaften ermöglichen es Benutzern, die MQTT-Protokoll wirksam und kann in allen Nachrichten und Antworten erscheinen. Da Benutzereigenschaften vom Benutzer definiert werden, sind sie nur für die Aktion des Benutzers von Bedeutung.

Warum brauchen wir Benutzereigenschaften?

Benutzereigenschaften werden verwendet, um die schlechte Skalierbarkeit von MQTT 3 zu beheben. Wenn die Möglichkeit besteht, dass beliebige Informationen in der Nachricht übertragen werden können, stellt dies sicher, dass der Benutzer die Funktionalität des Standardprotokolls erweitern kann, um seine eigenen Bedürfnisse zu erfüllen.

Für Nachrichtentypen mit unterschiedlichen Optionen oder Konfigurationen können Benutzereigenschaften zwischen dem Client und dem MQTT-Broker oder zwischen den Clients gesendet werden. Wenn beispielsweise Benutzereigenschaften im verbundenen Client konfiguriert sind, können sie nur auf dem MQTT-Broker, aber nicht auf dem Client empfangen werden. Wenn Benutzereigenschaften beim Senden einer Nachricht konfiguriert sind, können sie von anderen Clients empfangen werden. Die folgenden zwei Arten der Konfiguration von Benutzereigenschaften werden häufig verwendet.

Benutzereigenschaften des verbundenen Clients

Wenn der Client eine Verbindung mit dem MQTT-Broker initiiert, kann der Broker einige erforderliche Metadateninformationen vordefinieren, die verwendet werden können, nämlich Benutzereigenschaften. Wenn die Verbindung erfolgreich ist, kann der MQTT-Dienst die von der Verbindung gesendeten relevanten Informationen zur Verwendung erhalten. Daher hängen die Benutzereigenschaften des verbundenen Clients vom MQTT-Broker ab.

Benutzereigenschaften während der Nachrichtenveröffentlichung

Benutzereigenschaften während der Nachrichtenveröffentlichung werden möglicherweise häufiger verwendet, da sie Metadateninformationen zwischen den Clients übertragen können. Beispielsweise können Sie beim Veröffentlichen von Nachrichten einige allgemeine Informationen hinzufügen, z. B. Nachrichtennummer, Zeitstempel, Datei, Client-Informationen und Routing-Informationen.

Zusätzlich zu den oben genannten Benutzereigenschaften-Einstellungen können Sie auch Benutzereigenschaften konfigurieren, wenn Sie das Thema abonnieren, sich abmelden oder die Verbindung trennen.

Verwendung von Benutzereigenschaften

Datei Übertragung

Benutzereigenschaften von MQTT5 kann für die Dateiübertragung erweitert werden, anstatt Daten in die Nutzdaten des Nachrichtentexts einzufügen und Schlüssel-Wert-Paare für Benutzereigenschaften im vorherigen MQTT 3 zu verwenden. Dies bedeutet auch, dass die Datei binär gehalten werden kann, da die Metadaten der Datei sind in den Benutzereigenschaften. Zum Beispiel:

{
  "filename": "test.txt",
  "content": "xxxx"
}

Ressourcenanalyse

Wenn sich der Client mit dem MQTT-Broker verbindet, übertragen verschiedene Clients und Plattformen oder Systeme von verschiedenen Anbietern Nachrichtendaten auf unterschiedliche Weise. Es kann strukturelle Unterschiede im Nachrichtendatenformat geben, und einige Clients sind in verschiedenen Regionen verteilt. Beispielsweise ist das vom Gerät in Region A gesendete Nachrichtenformat JSON und das vom Gerät in Region B gesendete XML. Zu diesem Zeitpunkt muss der Server möglicherweise nach dem Empfang der Nachricht eine nach der anderen beurteilen und vergleichen, um einen geeigneten Parser für die Datenanalyse zu finden.

Um die Effizienz zu verbessern und die Rechenlast zu reduzieren, können wir die Funktion Benutzereigenschaften verwenden, um Datenformatinformationen und geografische Informationen hinzuzufügen. Wenn der Server die Nachricht empfängt, kann er die Metadaten in den Benutzereigenschaften verwenden, um die Daten zu analysieren. Darüber hinaus kann die Client-Subskription von Bereich A, wenn sie die Client-Nachricht von Bereich B empfängt, auch schnell wissen, aus welchem ​​Bereich die spezifische Nachricht stammt, so dass die Nachricht nachvollziehbar ist.

{
  "region": "A",
  "type": "JSON"
}

MQTT-Ressourcenanalyse

Nachrichtenweiterleitung

Wir können auch Benutzereigenschaften verwenden, um das Routing auf Anwendungsebene durchzuführen. Wie oben erwähnt, gibt es unterschiedliche Systeme und Plattformen, und in jedem Bereich gibt es unterschiedliche Geräte. Mehrere Systeme können Nachrichten von demselben Gerät empfangen. Einige Systeme müssen Daten in Echtzeit anzeigen, und ein anderes System kann diese Daten in Zeitreihen speichern. Daher kann der MQTT-Server anhand der in der gemeldeten Nachricht konfigurierten Benutzereigenschaften bestimmen, ob die Nachricht an das System verteilt werden soll, das die Nachricht speichert, oder an das System, das die Daten präsentiert.

{
  "type": "real-time",
  "timestamp": 1636620444
}

MQTT-Nachrichtenrouting

So konfigurieren Sie im MQTT-Client

Nehmen wir ein Beispiel für die Programmierung mit JavaScript, indem wir die verwenden MQTT.js Klient. Wir können zuerst die Version von MQTT als MQTT 5.0 angeben, wenn wir uns mit dem Client verbinden.

Verbinden

Beim Verbinden legen wir die Benutzereigenschaften in den Eigenschaftenoptionen fest und fügen die Typ- und Regionseigenschaften hinzu. Nach erfolgreicher Verbindung erhält der MQTT-Broker diese benutzerdefinierte Nachricht.

// connect options
const OPTIONS = {
  clientId: 'mqtt_test',
  clean: true,
  connectTimeout: 4000,
  username: 'emqx',
  password: 'public',
  reconnectPeriod: 1000,
  protocolVersion: 5,
  properties: {
    userProperties: {
      region: 'A',
      type: 'JSON',
    },
  },
}
const client = mqtt.connect('mqtt://broker.emqx.io', OPTIONS)

Nachrichten veröffentlichen

Nachdem die Verbindung erfolgreich hergestellt wurde, abonnieren und veröffentlichen wir die Nachricht und legen die Benutzereigenschaften in der Konfiguration zum Veröffentlichen von Nachrichten fest. Dann überwachen wir den Nachrichtenempfang. In der Veröffentlichungsfunktion konfigurieren wir die Benutzereigenschaften. Wir drucken das Paket aus, um die gerade konfigurierten Benutzereigenschaften in der Funktion anzuzeigen, die die Nachricht abhört und empfängt.

client.publish(topic, 'nodejs mqtt test', {
  qos: 0,
  retain: false,
  properties: {
    userProperties: {
      region: 'A',
      type: 'JSON',
    },
  },
}, (error) => {
  if (error) {
    console.error(error)
  }
})
client.on('message', (topic, payload, packet) => {
  console.log('packet:', packet)
  console.log('Received Message:', topic, payload.toString())
})

An diesem Punkt können wir sehen, dass die unmittelbar vor der Veröffentlichung konfigurierten Benutzereigenschaften gedruckt und in der Konsole ausgegeben wurden.

Für andere Clients werden wir zunächst die benutzerdefinierte Konfigurationsfunktion für Benutzereigenschaften in späteren Versionen der plattformübergreifenden Version unterstützen MQTT 5.0-Desktop-Client-Tool – MQTT X, die es Benutzern erleichtert, einige neue Funktionen von MQTT 5.0 schnell zu testen. Bitte freuen Sie sich darauf!

Ursprünglich erschienen bei

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *