Docker MQTT のインストールと使用のチュートリアル

Docker MQTT のインストールと使用のチュートリアル

MQTT の紹介

MQTT (Message Queuing Telemetry Transport) は、IBM が開発したインスタント メッセージング プロトコルであり、モノのインターネットの重要な部分になる可能性があります。このプロトコルはすべてのプラットフォームをサポートしており、ほぼすべての接続オブジェクトを外部の世界に接続できます。センサーやアクチュエータの通信プロトコルとして使用されます(Twitter 経由で家をインターネットに接続するなど)。

DockerはRabbitMQをインストールし、MQTTを設定します

MQTT サーバーとして RabbitMQ を使用し、クライアントとして Eclipse Paho を使用します。ホストシステムはUbuntu 16.04です

Docker ダウンロードイメージ

docker pull daocloud.io/library/rabbitmq:3.7.4

RabbitMQを起動する

docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 -p 1883:1883 -p 15675:15675 daocloud.io/library/rabbitmq:3.7.4

マッピングコンテナポートに注意してください

  • 15672はRabbitMQ管理インターフェースのデフォルトのアクセスポートです。
  • 5672はamqpのデフォルトポートです
  • 1883はMQTT TCPプロトコルのデフォルトポートです
  • 15675はweb_mqtt websocketプロトコルのデフォルトポートです

プラグインを有効にする

デフォルトのインストール後、rabbitmq_management プラグイン、rabbitmq_mqtt プラグイン、rabbitmq_web_mqtt プラグインを手動で有効にする必要があります。

次の3つのコマンドを実行します

docker exec <コンテナID> rabbitmq-plugins で rabbitmq_management を有効にする
docker exec <コンテナID> rabbitmq-plugins enable rabbitmq_mqtt
docker exec <コンテナID> rabbitmq-plugins enable rabbitmq_web_mqtt

もちろん、start.shスクリプトを書いてコンテナにコピーすることもできます。

/usr/sbin/rabbitmq-plugins でrabbitmq_managementを有効にする
/usr/sbin/rabbitmq-plugins でrabbitmq_mqttを有効にする
/usr/sbin/rabbitmq-plugins でrabbitmq_web_mqtt を有効にする

コンテナに入り、このスクリプトを実行します。

sh start.sh

ホストポートを開く

ファイアウォールコマンド --zone=public --add-port=15672/tcp --permanent
ファイアウォールコマンド --zone=public --add-port=5672/tcp --permanent
ファイアウォールコマンド --zone=public --add-port=1883/tcp --permanent
ファイアウォールコマンド --zone=public --add-port=15675/tcp --permanent
ファイアウォール-cmd --reload

Python MQTTクライアント実装

Python パッケージをインストールする

pip install paho-mqtt

データ送信デモ(消費者)

# 使用する前に、hbase と thrift サーバーを起動する必要があります。# cd /usr/local/hbase bin/start-hbase.sh で hbase を起動します。デフォルトのポートは 60000 です。
# Thriftサーバーを起動します。cd /usr/local/hbase/bin execute ./hbase-daemon.sh start thrift デフォルトのポートは9090です。
インポートシステム
インポートOS
dir_common = os.path.split(os.path.realpath(__file__))[0] + '/../'
sys.path.append(dir_common) # 通常は共通フォルダを参照するためにシステムディレクトリにルートディレクトリを追加します import argparse #
インポートログ
インポート時間、日時
common.py_log から init_logger、init_console_logger をインポートします
common.config からインポート *
common.py_hbase から PyHbase をインポートします
インポート時間、json
common.py_rabbit から Rabbit_Consumer をインポートします
paho.mqtt.client を mqtt としてインポートします。
インポート時間
ホスト = "192.168.2.46"
ポート = 1883
client_loop() を定義します:
  client_id = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
  client = mqtt.Client(client_id) # ClientId は繰り返すことができないため、現在の時刻を使用します client.username_pw_set("guest", "guest") # 設定する必要があります。設定しないと、「結果コード 4 で接続されました」が返されます
  クライアント.on_connect = on_connect
  クライアント.on_message = on_message
  クライアント.connect(ホスト、ポート、60)
  クライアント.loop_forever()
on_connect を定義します(クライアント、ユーザーデータ、フラグ、rc):
  print("結果コード "+str(rc) で接続されました)
  クライアント.subscribe("テスト")
on_message を定義します(クライアント、ユーザーデータ、メッセージ):
  print(msg.topic+" "+msg.payload.decode("utf-8"))
__name__ == '__main__' の場合:
  クライアントループ()

データ受信デモ(プロデューサー)

インポートシステム
インポートOS
dir_common = os.path.split(os.path.realpath(__file__))[0] + '/../'
sys.path.append(dir_common) # 共通フォルダを参照するためにシステムディレクトリにルートディレクトリを追加します。通常は import paho.mqtt.client as mqtt
インポート時間
ホスト = "192.168.2.46"
ポート = 1883
client_loop() を定義します:
  client_id = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
  client = mqtt.Client(client_id) # ClientId は繰り返すことができないため、現在の時刻を使用します client.username_pw_set("guest", "guest") # 設定する必要があります。設定しないと、「結果コード 4 で接続されました」が返されます
  クライアント.on_connect = on_connect
  クライアント.on_message = on_message
  クライアント.connect(ホスト、ポート、60)
  クライアント.loop_forever()
on_connect を定義します(クライアント、ユーザーデータ、フラグ、rc):
  print("結果コード "+str(rc) で接続されました)
  クライアント.subscribe("テスト")
on_message を定義します(クライアント、ユーザーデータ、メッセージ):
  print(msg.topic+" "+msg.payload.decode("utf-8"))
__name__ == '__main__' の場合:
  クライアントループ()

プロデューサーデモ

# paho.mqtt.client を mqtt としてインポートします
paho.mqtt.publish を publish としてインポートします。
インポート時間
ホスト = "192.168.2.46"
ポート = 1883
on_connect を定義します(クライアント、ユーザーデータ、フラグ、rc):
  print("結果コード "+str(rc) で接続されました)
  クライアント.subscribe("テスト")
on_message を定義します(クライアント、ユーザーデータ、メッセージ):
  print(msg.topic+" "+msg.payload.decode("utf-8"))
__name__ == '__main__' の場合:
  client_id = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
  # client = mqtt.Client(client_id) # ClientId は繰り返すことができないため、現在の時刻を使用します# client.username_pw_set("guest", "guest") # 設定する必要があります。設定しないと、「結果コード 4 で接続されました」が返されます
  # クライアント.on_connect = on_connect
  # クライアント.on_message = on_message
  # client.connect(ホスト、ポート、60)
  # client.publish("test", "Hello MQTT", qos=0, preserve=False) # メッセージをパブリッシュ publish.single("test", "Hello MQTT", qos = 1, hostname=HOST, port=PORT, client_id=client

公式ドキュメント:
mqtt http://www.rabbitmq.com/mqtt.html

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • WeChatアプレットはサーバーに接続してMQTTデータ情報を表示します
  • Dockerを使用してMQTTサーバーを構築するプロセスの詳細な説明

<<:  ドロップダウンメニュー効果を実現するJavaScript

>>:  Mysql GTID Mha 設定方法

推薦する

CSS3のbox-shadowプロパティの使い方の詳細な例

CSS には多くの属性があります。特に複数の値を設定する必要がある属性は、長期間使用しないと忘れられ...

Windows で mysql5.7.21 をインストールするための詳細なチュートリアル

この記事では、参考までにMySQL 5.7.21のインストールチュートリアルを紹介します。具体的な内...

MySQL ディープ ページング (数千万のデータを素早くページ分割する方法)

目次序文場合最適化まとめ序文バックエンド開発では、一度に大量のデータがロードされ、メモリやディスク ...

古い Vue プロジェクトに Vite サポートを追加する方法

1. はじめに会社のプロジェクトを引き継いで2年になります。今では毎回プロジェクトを起動するのに1分...

Bツリー挿入プロセスの概要

前回の記事 https://www.jb51.net/article/154153.htm では、B...

Reactコンポーネントのライフサイクルの詳細な説明

目次1.ライフサイクルとは何か2. 読み込みプロセス1.コンストラクタ2. レンダリング3. コンポ...

LeetCode の SQL 実装 (175. 2 つのテーブルの結合)

[LeetCode] 175.2つのテーブルを結合する表: 人物+-------------+--...

MySQLのパスワードを忘れた場合の対処方法

MySQL パスワードを 2 回忘れてしまいましたか?最初、私はアンインストールして再インストールす...

Ubuntu 16.4 で完全に分散された Hadoop 環境を構築するための実践的なチュートリアル

序文この記事は主にubantu 16.4 Hadoop完全分散構築に関する関連コンテンツを紹介し、皆...

CSS における px、em、rem、pt の特徴、違い、変換について詳しく説明します。

コンセプト紹介: 1. px (ピクセル):仮想的な長さの単位で、コンピュータ システムのデジタル画...

Vueのドラッグ可能なコンポーネントであるVue Smooth DnDの使用方法の詳細な説明

目次紹介とデモAPI: コンテナ財産ライフサイクルコールバックイベントAPI: ドラッグ可能実際の戦...

パズル効果を実現するネイティブ js

この記事では、パズル効果を実現するためのネイティブjsの具体的なコードを参考までに共有します。具体的...

Nodejs 探索: シングルスレッドの高並行性の原理を深く理解する

目次序文一目でわかる建築オペレーティングシステムとの対話シングルスレッドイベント駆動/イベントループ...

Vueはmockjsを使用してシミュレートされたデータケースの詳細を生成します

目次プロジェクトにmockjsをインストールするVueプロジェクトでmockjsを使用する基本的なプ...

nginx 設定ファイルパスとリソースファイルパスを表示する方法

nginx 設定ファイルのパスを表示する nginx -t 経由nginx -t コマンドの本来の機...