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

推薦する

iframe を更新する 3 つの方法

コードをコピーコードは次のとおりです。 <iframe src="1.htm&quo...

Dockerでホストファイルをカスタマイズする方法について簡単に説明します

目次1. コマンド2. docker-compose.yml 3. Dockerファイル4. 直接変...

nuxt.js 複数の環境変数の設定

目次1. はじめに2. シナリオ3. 環境を整える3.1 環境変数の挿入4. 最後に1. はじめに一...

Linux で top コマンドを使用する際のヒント

まず、top のいくつかのフィールドの意味を紹介します。 VIRT:仮想メモリ使用量1. プロセスが...

Docker を使用してエンタープライズレベルのカスタムイメージを構築する方法

序文退社前に、ある依頼を受けました。基本イメージ規格の変更により、最新の Docker イメージ規格...

Nginx URL 書き換えメカニズムの原理と使用例

URL 書き換えは、Web サイトの優先ドメインを決定するのに役立ちます。同じリソース ページの複数...

Typescriptを使用してWeChatミニプログラムを開発するための詳細な手順

Typescript の利点については詳しく説明する必要はありません。ご興味があれば、(https:...

Docker に Kong ゲートウェイをインストールする方法の例

1. Dockerネットワークを作成する docker ネットワーク作成 kong-net 2. デ...

JS でシンプルな画像カルーセル効果を実現

この記事では、シンプルな画像カルーセル効果を実現するためのJSの具体的なコードを参考までに紹介します...

Centos7 で ZooKeeper3.4 ミドルウェアを構築するための一般的なコマンドの概要

1.ダウンロードして解凍する1. Zookeeperの紹介分散サービス フレームワークとして、Zoo...

Docker コンテナで ASP.NET Core を実行する手順

最近は学ぶべき知識が多すぎて、どれを先に学べばいいのかわかりません。このブログはもともとxamari...

Win7x64でのMySQL 5.7.18解凍版のインストール方法

関連記事: Win7 x64 に解凍版の mysql 5.7.18 winx64 をインストールする...

MySQL の日付と時刻の加算と減算のサンプル コード

目次1.MySQLは時間間隔を加算または減算します2. 日付を減算する最近、MySQL を見直してい...

Gokudōゲームにおけるフロントエンド知識のまとめ

背景日本語を学び始めた当初は、日本語の50音を覚えるのは簡単ではなく、特にカタカナを覚えるのは困難で...