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 設定方法

推薦する

プロキシはVue3データの双方向バインディングの原理を実現します

目次1. proxy と Object.defineProperty の利点2. プロキシ監視オブジ...

JSブラウザストレージの詳しい説明

目次導入クッキークッキーとはクッキー生成方法クッキーの適用シナリオクッキーのデメリット回避策ローカル...

更新とデータ整合性処理のためのMySQLトランザクション選択の説明

MySQL のトランザクションはデフォルトで自動的にコミットされます (autocommit = 1...

Linux システムで tcpdump を使用してパケットをキャプチャする方法

まずサンプルコードを見てみましょう: 1. 共通パラメータ tcpdump -i eth0 -nn ...

MySQL で大量のデータ (数千万) を素早く削除するためのいくつかの実用的なソリューションの詳細な説明

著者は最近、仕事でパフォーマンスのボトルネックの問題に遭遇しました。MySQL テーブルには毎日約 ...

HTMLは入力完了を検出する機能を実装する

入力が進行中かどうかを検出するには、「onInput(event)」を使用しますコンテンツが変更され...

HTML 描画ユーザー登録ページ

この記事では、HTML描画ユーザー登録ページの具体的な実装コードを参考までに共有します。具体的な内容...

メタタグの詳しい説明(メタタグの役割)

個人のウェブサイトがどんなに素晴らしいものであっても、サイバースペースの広大な海に浮かぶ小さなボート...

開発者にとって必須の Docker コマンドの概要

目次Docker入門Docker環境のインストールDockerイメージの共通コマンド検索ミラー画像を...

Docker で最初のアプリケーションをデプロイする方法

前回の記事では、Docker Desktop をインストールし、Kubernetes を有効にしまし...

JavaScript の寄生的構成継承についての簡単な説明

コンポジション継承組み合わせ継承は、疑似古典的継承とも呼ばれます。これは、昨日説明したプロトタイプ ...

vue3 学習ノートにおける axios の使用の変更の概要

目次1. axioの基本的な使い方2. クロスドメインの問題を解決するには? 3. パッケージ4. ...

設定ファイルを変更した後、操作を再開します

余計なことは言わないで、コードだけ見てみましょう〜 # docker-compose をダウン # ...

エラー 1862 (HY000): パスワードの有効期限が切れています。ログインするには、..... を使用してパスワードを変更する必要があります。

エラーメッセージ:エラー 1862 (HY000): パスワードの有効期限が切れています。ログインす...

mysql8 共通テーブル式 CTE 使用例の分析

この記事では、例を使用して、MySQL 8 の共通テーブル式 (CTE) の使用方法を説明します。ご...