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

推薦する

MySQL マスタースレーブレプリケーションプロセスの詳細な説明

1. マスタースレーブレプリケーションとは何ですか?マスター データベースの DDL および DML...

nginx で gzip 圧縮を実装してウェブサイトの速度を向上させる方法

目次gzip 圧縮を使用する理由は何ですか? nginxはgzipを実装するgzip処理nginx ...

Centos 7 mysql-8.0.19-1.el7.x86_64.rpm-bundle.tar の簡単な分析

Baiduクラウドディスク:リンク: https://pan.baidu.com/s/1hv5rUW...

nohup /dev/null 2>&1 の使い方の詳しい説明

nohup コマンド: プロセスを実行しており、アカウントからログアウトしてもプロセスが終了しないと...

よくある MySQL 設計エラーをご存知ですか?

インターネットの発達により、バスを待ったり地下鉄に乗ったりする時間など、断片的な時間を活用して、いつ...

CSSセレクターでの正規表現の使用

はい、CSS にも正規表現があります (アーメン) CSS で目立つための 2 つの強力なツール: ...

動的テーブルを実装するための要素サンプルコード

目次【コード背景】 【コード実装】 #1# -> コード再利用の基本は、再利用可能なコンポーネ...

vue cli で env を使用するガイド

目次序文紹介-公式設定例序文vueCli を使用してプロジェクトを開発したことのある方は、少しがっか...

MySQL 数千万のビッグデータに対するSQLクエリ最適化の知識ポイントのまとめ

1. クエリを最適化するには、テーブル全体のスキャンを避けてください。まず、where と orde...

MySQLのあいまいクエリインデックスの失敗の問題を解決するいくつかの方法

% ワイルドカードを使用すると、インデックス失敗の問題が発生することがよくあります。ここでは、lik...

json.stringify() と json.parse() の違いと使い方

1. JSON.stringify() と JSON.parse() の違い私たちは皆、JSON.s...

div 要素に終了タグがないため、Web ページを開くことができません

最初は速度の問題だと思ったので、その後、すべての画像リンク リクエストをクロスサイト接続ではなくサイ...

HTML の marquee 属性の詳細な説明

このタグはHTML3.2の一部ではなく、MSIE3以降のカーネルでのみサポートされているため、IEカ...

CSS3 変換によって子要素の固定位置を絶対位置に変更する方法

この記事では、CSS3 の transform を使用して子要素の固定配置を絶対配置に変更する方法を...

フォームファイル選択ボックスのスタイルをカスタマイズする例

コードをコピーコードは次のとおりです。 <!DOCTYPE html> <html...