MQTT の紹介 MQTT (Message Queuing Telemetry Transport) は、IBM が開発したインスタント メッセージング プロトコルであり、モノのインターネットの重要な部分になる可能性があります。このプロトコルはすべてのプラットフォームをサポートしており、ほぼすべての接続オブジェクトを外部の世界に接続できます。センサーやアクチュエータの通信プロトコルとして使用されます(Twitter 経由で家をインターネットに接続するなど)。 DockerはRabbitMQをインストールし、MQTTを設定します MQTT サーバーとして RabbitMQ を使用し、クライアントとして Eclipse Paho を使用します。ホストシステムはUbuntu 16.04です Docker ダウンロードイメージ
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 マッピングコンテナポートに注意してください
プラグインを有効にする デフォルトのインストール後、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 を有効にする コンテナに入り、このスクリプトを実行します。 ホストポートを開く ファイアウォールコマンド --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 パッケージをインストールする
データ送信デモ(消費者) # 使用する前に、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 公式ドキュメント: 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。 以下もご興味があるかもしれません:
|
<<: ドロップダウンメニュー効果を実現するJavaScript
目次1. proxy と Object.defineProperty の利点2. プロキシ監視オブジ...
目次導入クッキークッキーとはクッキー生成方法クッキーの適用シナリオクッキーのデメリット回避策ローカル...
MySQL のトランザクションはデフォルトで自動的にコミットされます (autocommit = 1...
まずサンプルコードを見てみましょう: 1. 共通パラメータ tcpdump -i eth0 -nn ...
著者は最近、仕事でパフォーマンスのボトルネックの問題に遭遇しました。MySQL テーブルには毎日約 ...
入力が進行中かどうかを検出するには、「onInput(event)」を使用しますコンテンツが変更され...
この記事では、HTML描画ユーザー登録ページの具体的な実装コードを参考までに共有します。具体的な内容...
個人のウェブサイトがどんなに素晴らしいものであっても、サイバースペースの広大な海に浮かぶ小さなボート...
目次Docker入門Docker環境のインストールDockerイメージの共通コマンド検索ミラー画像を...
前回の記事では、Docker Desktop をインストールし、Kubernetes を有効にしまし...
コンポジション継承組み合わせ継承は、疑似古典的継承とも呼ばれます。これは、昨日説明したプロトタイプ ...
目次1. axioの基本的な使い方2. クロスドメインの問題を解決するには? 3. パッケージ4. ...
余計なことは言わないで、コードだけ見てみましょう〜 # docker-compose をダウン # ...
エラーメッセージ:エラー 1862 (HY000): パスワードの有効期限が切れています。ログインす...
この記事では、例を使用して、MySQL 8 の共通テーブル式 (CTE) の使用方法を説明します。ご...