Tutorial zur Installation und Verwendung von Docker MQTT

Tutorial zur Installation und Verwendung von Docker MQTT

Einführung in MQTT

MQTT (Message Queuing Telemetry Transport) ist ein von IBM entwickeltes Instant-Messaging-Protokoll, das das Potenzial hat, ein wichtiger Bestandteil des Internets der Dinge zu werden. Das Protokoll unterstützt alle Plattformen und kann nahezu alle vernetzten Objekte mit der Außenwelt verbinden. Es wird als Kommunikationsprotokoll für Sensoren und Aktoren verwendet (z. B. um Häuser über Twitter mit dem Internet zu verbinden).

Docker installiert RabbitMQ und konfiguriert MQTT

Verwenden Sie RabbitMQ als MQTT-Server und Eclipse Paho als Client. Das Hostsystem ist Ubuntu 16.04

Docker-Download-Image

docker pull daocloud.io/library/rabbitmq:3.7.4

Starten Sie RabbitMQ

docker run -d --hostname mein-Kaninchen --name irgendein-Kaninchen -p 15672:15672 -p 5672:5672 -p 1883:1883 -p 15675:15675 daocloud.io/library/rabbitmq:3.7.4

Beachten Sie den Mapping-Container-Port

  • 15672 ist der Standardzugriffsport der RabbitMQ-Verwaltungsschnittstelle
  • 5672 ist der Standardport für amqp
  • 1883 ist der Standardport des MQTT TCP-Protokolls
  • 15675 ist der Standardport für das WebSocket-Protokoll web_mqtt

Plugin aktivieren

Nach der Standardinstallation müssen wir das Plugin rabbitmq_management, das Plugin rabbitmq_mqtt und das Plugin rabbitmq_web_mqtt manuell aktivieren.

Führen Sie die folgenden drei Befehle aus

docker exec <Container-ID> rabbitmq-plugins aktivieren rabbitmq_management
docker exec <Container-ID> rabbitmq-plugins aktivieren rabbitmq_mqtt
docker exec <Container-ID> rabbitmq-plugins aktivieren rabbitmq_web_mqtt

Natürlich können Sie auch ein Skript start.sh schreiben und es in den Container kopieren

/usr/sbin/rabbitmq-plugins aktivieren rabbitmq_management
/usr/sbin/rabbitmq-plugins aktivieren rabbitmq_mqtt
/usr/sbin/rabbitmq-plugins aktivieren rabbitmq_web_mqtt

Betreten Sie den Container und führen Sie dieses Skript aus.

sh start.sh

Öffnen Sie Host-Ports

Firewall-Befehl --zone=public --add-port=15672/tcp --permanent
Firewall-Befehl --zone=public --add-port=5672/tcp --permanent
Firewall-Befehl --zone=public --add-port=1883/tcp --permanent
Firewall-Befehl --zone=public --add-port=15675/tcp --permanent
Firewall-Befehl --reload

Python MQTT-Client-Implementierung

Installieren Sie Python-Pakete

pip install paho-mqtt

Datendemo senden (Verbraucher)

# Vor der Verwendung müssen Sie Hbase und den Thrift-Server starten. # Starten Sie Hbase mit cd /usr/local/hbase bin/start-hbase.sh. Der Standardport ist 60000.
# Starten Sie den Thrift-Server cd /usr/local/hbase/bin execute ./hbase-daemon.sh start thrift Der Standardport ist 9090
System importieren
Betriebssystem importieren
dir_common = os.path.split(os.path.realpath(__file__))[0] + '/../'
sys.path.append(dir_common) # Fügen Sie das Stammverzeichnis zum Systemverzeichnis hinzu, um normalerweise auf den gemeinsamen Ordner zu verweisen. importiere argparse #
Importprotokollierung
Importzeit, Datum/Uhrzeit
von common.py_log importiere init_logger,init_console_logger
aus common.config importieren *
von common.py_hbase importiere PyHbase
Importzeit, JSON
von common.py_rabbit importiere Rabbit_Consumer
importiere paho.mqtt.client als mqtt
Importzeit
HOST = "192.168.2.46"
PORT = 1883
def client_loop():
  client_id = Zeit.strftime('%Y%m%d%H%M%S',Zeit.localtime(Zeit.Zeit()))
  client = mqtt.Client(client_id) # ClientId kann nicht wiederholt werden, verwenden Sie also die aktuelle Zeit client.username_pw_set("guest", "guest") # Muss festgelegt werden, sonst wird "Verbunden mit Ergebniscode 4" zurückgegeben
  client.on_connect = bei_Verbindung
  client.on_message = bei_Nachricht
  client.connect(HOST, PORT, 60)
  client.loop_forever()
def on_connect(Client, Benutzerdaten, Flags, rc):
  print("Verbunden mit Ergebniscode "+str(rc))
  client.subscribe("test")
def on_message(Client, Benutzerdaten, Nachricht):
  drucken(msg.topic+" "+msg.payload.decode("utf-8"))
wenn __name__ == '__main__':
  client_loop()

Datendemo empfangen (Produzent)

System importieren
Betriebssystem importieren
dir_common = os.path.split(os.path.realpath(__file__))[0] + '/../'
sys.path.append(dir_common) # Fügen Sie das Stammverzeichnis zum Systemverzeichnis hinzu, um auf den gemeinsamen Ordner zu verweisen. Importieren Sie normalerweise paho.mqtt.client als mqtt
Importzeit
HOST = "192.168.2.46"
PORT = 1883
def client_loop():
  client_id = Zeit.strftime('%Y%m%d%H%M%S',Zeit.localtime(Zeit.Zeit()))
  client = mqtt.Client(client_id) # ClientId kann nicht wiederholt werden, verwenden Sie also die aktuelle Zeit client.username_pw_set("guest", "guest") # Muss festgelegt werden, sonst wird "Verbunden mit Ergebniscode 4" zurückgegeben
  client.on_connect = bei_Verbindung
  client.on_message = bei_Nachricht
  client.connect(HOST, PORT, 60)
  client.loop_forever()
def on_connect(Client, Benutzerdaten, Flags, rc):
  print("Verbunden mit Ergebniscode "+str(rc))
  client.subscribe("test")
def on_message(Client, Benutzerdaten, Nachricht):
  drucken(msg.topic+" "+msg.payload.decode("utf-8"))
wenn __name__ == '__main__':
  client_loop()

Produzentendemo

# importiere paho.mqtt.client als mqtt
importiere paho.mqtt.publish als publish
Importzeit
HOST = "192.168.2.46"
PORT = 1883
def on_connect(Client, Benutzerdaten, Flags, rc):
  print("Verbunden mit Ergebniscode "+str(rc))
  client.subscribe("test")
def on_message(Client, Benutzerdaten, Nachricht):
  drucken(msg.topic+" "+msg.payload.decode("utf-8"))
wenn __name__ == '__main__':
  client_id = Zeit.strftime('%Y%m%d%H%M%S',Zeit.localtime(Zeit.Zeit()))
  # client = mqtt.Client(client_id) # ClientId kann nicht wiederholt werden, verwenden Sie also die aktuelle Zeit# client.username_pw_set("guest", "guest") # Muss festgelegt werden, sonst wird „Verbunden mit Ergebniscode 4“ zurückgegeben
  # client.on_connect = bei_Verbindung
  # client.on_message = bei_Nachricht
  # Client.Verbinden(HOST, PORT, 60)
  # client.publish("test", "Hello MQTT", qos=0, retain=False) # Nachricht veröffentlichen publish.single("test", "Hello MQTT", qos = 1, hostname=HOST, port=PORT, client_id=client

Amtliche Dokumentation:
mqtt http://www.rabbitmq.com/mqtt.html

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • Das WeChat-Applet stellt eine Verbindung zum Server her, um MQTT-Dateninformationen anzuzeigen
  • Detaillierte Erläuterung des Prozesses zum Erstellen eines MQTT-Servers mit Docker

<<:  Mysql GTID Mha-Konfigurationsmethode

>>:  JavaScript zum Erreichen eines einfachen Message Board-Falls

Artikel empfehlen

Verwenden Sie three.js, um coole 3D-Seiteneffekte im Acid-Stil zu erzielen

In diesem Artikel wird hauptsächlich die Verwendu...

Detailliertes Tutorial zum Herunterladen und Installieren von mysql8.0.21

Offizielle Website-Adresse: https://www.mysql.com...

MySQL-Abfrageanweisung nach Zeit gruppiert

MySQL-Abfrage nach Jahr, Monat, Woche, Tagesgrupp...

Zusammenfassung der Javascript-Datumstools

lass Utils = { /** * Ist es das Todesjahr? * @ret...

SQL-Gruppierung zum Entfernen von Duplikaten und Sortieren nach anderen Feldern

brauchen: Identische Elemente eines Feldes zusamm...

Detaillierte Erklärung zur Verwendung von Bild-Tags in HTML

In HTML wird das <img>-Tag verwendet, um ei...

Python schreibt die Ausgabe in den CSV-Vorgang

Wie unten dargestellt: def test_write(selbst): Fe...

Detaillierte Analyse des MySQL Master-Slave-Verzögerungsphänomens und -prinzips

1. Phänomen Am frühen Morgen wurde einer Online-T...

Installation von CUDA10.0 und Probleme in Ubuntu

Die Entsprechung zwischen der Tensorflow-Version ...

Schnelles Verständnis des Vue-Routing-Navigationsschutzes

Inhaltsverzeichnis 1. Globale Wache 1. Globale Fr...

Beispielanalyse zum Exportieren, Importieren und Kopieren von Docker-Images

Die erste Lösung besteht darin, das Bild in ein ö...

Sortierung und Paginierung von MySQL-Abfragen

Überblick Da wir die Daten normalerweise nicht di...