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.
| 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:
- Wählen Sie in der IBM IoT MessageSight-Webbenutzerschnittstelle die Optionen aus. Die nicht verbundenen MQTT-Clients sind in der Tabelle der MQTT-Clients aufgelistet.
- Wählen Sie in der Tabelle der MQTT-Clients den Client aus, den Sie löschen möchten.
- 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:
- Stellen Sie mit derselben Client-ID und dem Flag cleanSession=True eine temporäre Verbindung zu einem Client her.
- Trennen Sie die Verbindung.
- Stellen Sie die Verbindung zum Client mit dem Flag cleanSession=False wieder her.
- 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:
- 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 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:
- 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:
- Informationen dazu, wie Sie den IBM IoT MessageSight-Ressourcenadapter so konfigurieren, dass er die Beibehaltung der Nachrichtenreihenfolge unterstützt, finden Sie unter IBM IoT MessageSight-Ressourcenadapter für Beibehaltung der Nachrichtenreihenfolge konfigurieren.
- Wenn Sie MQTT QoS 2 verwenden, lesen Sie den Abschnitt Einschränkungen der Nachrichtenreihenfolge beim IBM IoT MessageSight-Ressourcenadapter. Ist die Nachrichtenreihenfolge kritisch für Ihre Anwendung, müssen Sie möglicherweise Folgenummern in Ihre Nachrichten einbetten. Mit Folgenummern können Ihre MQTT-Subskribentenanwendungen Situationen auflösen, in denen die Nachrichtenreihenfolge nicht eingehalten wird.
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>
});