MQTT-Anwendungen entwickeln

MQ Telemetry Transport (MQTT) ist ein einfaches Publish/Subscribe-Protokoll, das TCP/IP verwendet, um viele ferne Sensoren und Steuereinheiten anzuschließen. MQTT wird von Fachanwendungen auf Einheiten mit geringem Speicherbedarf verwendet, die eine niedrige Bandbreite und störanfällige Kommunikation tolerieren müssen.

MQTT-JavaScript in einem Web-Browser verwenden

In der folgenden Tabelle werden die aktuellsten Browserversionen für die Verwendung mit dem Messaging-Client unterstützt.

Tabelle 1. Unterstützte Browser für MQTT-Messaging-Client für JavaScript
Android iOS Linux Windows
Firefox für Android 19.0 und höher Safari 6.0 und höher Firefox 6.0 und höher Firefox 6.0 und höher
Chrome für Android 25.0 und höher Chrome 14.0 und höher Chrome 14.0 und höher Chrome 14.0 und höher

MQTT-Anwendungen entwickeln

Weitere Informationen zur Entwicklung von MQTT-Anwendungen finden Sie unter Mobile Messaging & M2M articles auf der Website der IBM® Messaging-Community bei developerWorks. Informationen sind auch in den folgenden Abschnitten der Dokumentation zu IBM MQ 7.5 verfügbar:

Siehe auch MQTT V3.1 Protocol Specification.

Weitere Informationen zum Abrufen eines MQTT-Clients finden Sie auf der Downloadseite der IBM Messaging-Community bei developerWorks. Klicken Sie auf Download Mobile Messaging & M2M Client Pack. Alternativ können Sie den Paho-Client in Eclipse verwenden.

Berücksichtigen Sie bei der Entwicklung von MQTT-Anwendungen die folgenden Punkte:
  • Die Schlüsselwörter ${UserID}, ${GroupID}, ${ClientID} und ${CommonName} werden in IBM IoT MessageSight als Substitutionsvariablen verwendet. Wenn Sie diese Schlüsselwörter in Ihrer Anwendung verwenden, kann das Fehler bei der Richtlinienvalidierung zur Folge haben. Daher müssen Sie sich mit der Verwendung dieser Schlüsselwörter vertraut machen, bevor Sie sie in Ihrer MQTT-Anwendung einsetzen. Weitere Informationen zu diesen Substitutionsvariablen finden Sie unter Variablensubstitution in Messaging-Richtlinien und Variablensubstitution in Verbindungsrichtlinien.
  • Jedes Mal, wenn Sie eine MQTT-Anwendung erneut starten, die speicherbasierte Persistenz mit der Einstellung cleanSession=False verwendet, müssen Sie für diese Clientanwendung alte Subskriptionsdaten in IBM IoT MessageSight bereinigen. Es gibt zwei Methoden, alte Subskriptionsdaten zu entfernen:
    • Sie können die folgenden Schritte ausführen, um alte Subskriptionen und alle zuvor vorhandenen Clients, die dieselbe Client-ID verwenden, administrativ aus IBM IoT MessageSight entfernen:
      1. Wählen Sie in der IBM IoT MessageSight-Webbenutzerschnittstelle die Optionen Überwachung > MQTT-Clients aus. Die nicht verbundenen MQTT-Clients sind in der Tabelle der MQTT-Clients aufgelistet.
      2. Wählen Sie in der Tabelle der MQTT-Clients den Client aus, den Sie löschen möchten.
      3. Klicken Sie auf Aktionen und wählen Sie Client löschen aus, um den Client und alle ihm zugeordneten Subskriptionen zu löschen.
    • Alternativ können Sie die folgenden Schritte ausführen, um eine bereinigte Umgebung zu erstellen:
      1. Stellen Sie mit derselben Client-ID und dem Flag cleanSession=True eine temporäre Verbindung zu einem Client her.
      2. Trennen Sie die Verbindung.
      3. Stellen Sie die Verbindung zum Client mit dem Flag cleanSession=False wieder her.
  • Wenn Sie MQTT-QoS-2-Anwendungen entwickeln, die mit JMS-Anwendungen interagieren, müssen Sie die JMS-Anwendungen so konfigurieren, dass die Servicequalität 2 (QoS 2) beibehalten wird.
    • Wenn Ihre MQTT-QoS-2-Anwendungen mit eigenständigen JMS-Anwendungen interagieren, führen Sie die folgenden Schritte aus, um die Servicequalität 2 (QoS 2) in den verschiedenen Anwendungen beizubehalten:
      • Vergewissern Sie sich, dass JMS-Clientsitzungen, die Nachrichten von MQTT-QoS-2-Anwendungen empfangen und auch Nachrichten an diese Anwendungen senden, transaktionsorientiert sind.
      • Vergewissern Sie sich, dass alle Nachrichten, die von JMS-Clientanwendungen an MQTT-QoS-2-Anwendungen gesendet werden, den Zustellmodus JMSDeliveryMode.PERSISTENT verwenden.
    • Wenn Ihre MQTT-QoS-2-Anwendungen mit eigenständigen Java™-EE-Anwendungen interagieren, die den IBM IoT MessageSight-Ressourcenadapter verwenden, führen Sie die folgenden Schritte aus, um die Servicequalität 2 (QoS 2) in den verschiedenen Anwendungen beizubehalten:
      • Vergewissern Sie sich, dass Ihre Java-EE-Anwendungen für die Verwendung globaler Transaktionen konfiguriert sind.
      • Vergewissern Sie sich, dass Ihre Java-EE-Anwendungen den Standardtransaktionstyp containergesteuerter Transaktionen verwenden. Wenn Ihre containergesteuerte Transaktion nicht das Standardtransaktionsattribut Erforderlich verwenden soll, müssen Sie das Attribut Erfordert neue(n), Verbindlich oder Unterstützt verwenden.
      • Wenn Ihre Java-EE-Anwendungen Nachrichten an MQTT-QoS-2-Anwendungen senden, vergewissern Sie sich, dasss Ihre Java-EE-Anwendungen den Zustellmodus JMSDeliveryMode.PERSISTENT nutzen.
  • Wenn Sie MQTT-Anwendungen entwickeln, die mit dem IBM IoT MessageSight-Ressourcenadapter interagieren, berücksichtigen Sie die folgenden Informationen, falls Sie die Nachrichtenreihenfolge beibehalten möchten:

MQTT-Hochverfügbarkeitsanwendungen entwickeln

MQTT hat eine integrierte Hochverfügbarkeitsunterstützung. Wenn Sie Hochverfügbarkeitsanwendungen mit MQTT entwickeln möchten, müssen Sie die folgenden Konfigurationen vornehmen:
  • Erstellen Sie eine Liste mit Server-URIs für die IBM IoT MessageSight-Server, aus denen sich Ihr Hochverfügbarkeitspaar zusammensetzt.
  • Richten Sie Ihre Anwendung so ein, dass sie nach einer Störung versucht, die Verbindung wiederherzustellen. Ein Aufruf, erstmalig oder nach einem Verbindungsausfall eine Verbindung herzustellen, erfolgt automatisch über die Liste der konfigurierten Server-URIs. Dieser Prozess wird so lange ausgeführt, bis eine erfolgreiche Verbindung hergestellt ist oder die Liste abgearbeitet ist und eine Fehlermeldung zurückgegeben wird. Wird eine Fehlermeldung zurückgegeben, versuchen Sie erneut, eine Verbindung herzustellen, da während des Failoverprozesses keine Verbindung zu einem Server hergestellt werden kann.
  • Setzen Sie das Flag cleanSession=0 für Publisher- und Subskribentenanwendungen mit hoher Verfügbarkeit. Andernfalls können Nachrichten, die während des Failoverprozesses verarbeitet wurden, verloren gehen, wenn die Verbindung zum neuen IBM IoT MessageSight-Server hergestellt wird.
  • Setzen Sie ein connectTimeout, das die Reaktionsfähigkeit Ihrer Anwendung sicherstellt.
  • Setzen Sie ein keepAliveTimeout.
Sie können das folgende Codefragment verwenden, um Verbindungen in C zu konfigurieren:
char* serverURIs[2] = {"tcp://myhaserver1:1883", "tcp://myhaserver2:1883"};
MQTTClient_connectOptions opts = MQTTClient_connectOptions_initializer;
opts.serverURIcount = 2;
opts.serverURIs = serverURIs;
opts.keepAliveInterval = 30;
opts.connectTimeout = 60;
MQTTClient_connect(client, &opts);
Sie können das folgende Codefragment verwenden, um Verbindungen in Java zu konfigurieren:
String[] urls = new String[]{"tcp://myhaserver1:1883", "tcp://myhaserver2:1883"};
MqttConnectOptions options = new MqttConnectOptions();
options.setServerURIs(urls);
options.setConnectionTimeout(value)
options.setKeepAliveInterval(value)
client.connect(options);
Um dieses Beispiel in JavaScript einzurichten, können Sie das folgende Codefragment verwenden:
var defaultServer = "myserver";
var defaultPort = 1883;
var arrHosts = ['myhaserver1', 'myhaserver2'];
var arrPorts = [1883,1883];
		
var client = new Messaging.Client(defaultServer, defaultPort, clientId);
client.connect({
		onSuccess : onConnectSuccess,
		onFailure : onConnectFailure,
		hosts : arrHosts,
		ports : arrPorts
  timeout: <value>
  keepAliveInterval: <value>
});



Feedback

Timestamp icon Letzte Aktualisierung: 28.09.2017
http://pic.dhe.ibm.com/infocenter/ism/v1r0m0/com.ibm.ism.doc/Developing/devmqttapp.html