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
序文この章では、基本的な Linux 関数と epoll 呼び出しを使用して、Linux 上で実行で...
この記事では、CentOS 7 に Chrome ブラウザをインストールする方法を紹介します。詳細は...
1. 機能紹介sed (Stream EDitor) は、コンテンツを 1 行ずつ処理するストリーム...
この記事では、参考までに、スネークゲームを実装するためのWeChatアプレットの具体的なコードを紹介...
注: MySQL5.7 で root パスワードをクラックするには、パスワード認証をスキップしてデー...
この記事では、カルーセルマップの効果を実現するためのjsの具体的なコードを参考までに共有します。具体...
序文あるプロジェクトの実行可能ファイルをインストールすると、MySQL 自体をインストールできるよう...
ラベルテキストと入力の垂直方向の中央揃えを調整するのは簡単ではありません。padding、verti...
この記事には、細かい点は一切なく、カラーマッチングのテクニックをシェアするだけです。とてもシンプルで...
MySQL挿入時の8時間の時差の問題を解決する通常、jdbc の URL にはいくつかのパラメータを...
目次1. 使用方法2. 準備3. 文法3.1 変数と代入3.2 入力および出力パラメータ3.3 プロ...
効果: GROUP_CONCAT関数は、フィールド値を文字列に連結することができます。デフォルトの区...
目次リポジトリソースを変更する起動するvue-devtoolsを置き換える予防ボーダーレスウィンドウ...
この記事では、例を使用して、MySQL レプリケーションの原理と実際のアプリケーションについて説明し...
テーブルを作成テーブルテーブル名を作成create table if not exists 表名 m...