MQTTの設置及び使用

5035 ワード

インターネット(Internet of Things,IoT)は最近、露出率が高まっている.HTTPはウェブページの事実上の基準であるが、マシン間(Machine-to-Machine,M 2 M)の大規模なコミュニケーションには異なるパターンが必要である:以前のリクエスト/回答(Request/Response)パターンは適切ではなく、代わりにパブリッシュ/サブスクリプション(Publish/Subscribe)パターンである.軽量級で拡張性のあるMQTT(Message Queuing Telemetry Transport)が拳足を発揮できる舞台だ.
ユビキタスネットワークの環境は非常に特別であるため、MQTTは以下の設計原則に従う.
  • はコンパクトで、有無の機能は追加されません.
  • リリース/サブスクリプション(Pub/sub)モードで、メッセージがセンサ間で伝達されるのを容易にします.
  • では、ユーザーがトピックを動的に作成でき、メンテナンスコストがゼロになります.
  • は、伝送効率を向上させるために伝送量を最小限に抑える.
  • は、低帯域幅、高遅延、不安定なネットワークなどの要因を考慮している.
  • は、連続したセッション制御をサポートします.
  • は、クライアントの計算能力が低い可能性があることを理解する.
  • は、サービス品質管理を提供します.
  • は、データが不可知であると仮定し、伝送データのタイプとフォーマットを強要せず、柔軟性を維持する.

  • パブリッシュ/サブスクリプションモード
    リクエスト/回答という同期モードとは異なり、パブリケーション/定義モードは、パブリケーション・メッセージのクライアント(パブリケーション)とサブスクリプション・メッセージのクライアント(サブスクライバ)との関係をデカップリングします.これは、パブリケーションとサブスクライバとの間に直接連絡を確立する必要がないことを意味します.例えば、あなたは友达に電話して、ずっと友达が電話に出るまで待ってから交流を始めることができて、典型的な同期要求/回答のシーンです.友达のメールリストに電子メールを送るのは違います.あなたが電子メールを送るのは何をすべきですか.友达は暇があればメールを見に行きます.典型的な非同期の投稿/購読のシーンです.プログラミングに詳しい学生は、これらのメリットをもたらしたので、このデザインモデルに詳しいに違いありません.
  • パブリッシャーとサブスクライバは、同じMessage Agentを認識すれば、お互いを理解することはできません.
  • パブリッシャーとサブスクライバはインタラクションを必要とせず、パブリッシャーはサブスクライバの確認を待つ必要がなくロックを引き起こす.
  • のパブリッシャーとサブスクライバは、同時にオンラインになる必要はなく、時間を自由に選択してメッセージを消費することができます.

  • テーマ
    MQTTはトピックによってメッセージを分類し,本質的にはUTF-8の文字列であるが,複数の階層関係を反スラッシュで表すことができる.トピックは作成する必要はありません.直接使用すればいいです.トピックはワイルドカードでフィルタすることもできます.ただし、+は1つのレベルをフィルタできますが、*はトピックの最後に任意のレベルをフィルタすることを示すレベルにのみ表示されます.例を挙げます.
  • building-b/floor-5:B階5階を代表する設備.
  • +/floor-5:どのビルの5階を表す設備ですか.
  • building-b/*:B階のすべての設備を代表します.

  • なお、MQTTではワイルドカードによるトピックの購読は許可されているが、ワイルドカードによるブロードキャストは許可されていない.
    サービス品質
    異なるシーンを満たすために、MQTTは3つの異なるレベルのサービス品質(Quality of Service,QoS)をサポートし、異なるシーンにメッセージ信頼性を提供する.
  • レベル0:最善を尽くします.メッセージ送信者は、メッセージを最善を尽くして送信しますが、予期せぬことがあっても再試行されません.
  • レベル1:少なくとも1回.メッセージ受信者が知覚していないか、または知覚自体が失われた場合、メッセージ送信者は、メッセージ受信者が少なくとも1回受信することを保証するために再び送信し、もちろん重複メッセージをもたらす可能性がある.
  • レベル2:ちょうど1回です.この意味が同時または遅延を減少させることを保証するが、メッセージの損失または重複が許容できない場合、レベル2が最適である.

  • サービスの質は古い話題です.レベル2で提供される重さを失わないことが多い場合が望ましいが,往復複数回の確認は必ず同時や遅延に影響を及ぼす.レベル1で提供される少なくとも1回の意味は、ログ処理というシーンでは完全にOKであるため、Kafkaのようなシステムは、このような特徴を利用して確認を低減し、同時性を大幅に向上させる.レベル0は鶏の肋骨データシーンに適しており、味がなくて捨てるのが惜しいので、そうしましょう.
    メッセージ・タイプ
    MQTTには14種類の異なるメッセージタイプがあります.
  • CONNECT:クライアントはMQTTエージェント
  • に接続する
  • CONNNACK:接続確認
  • PUBLISH:新規配信メッセージ
  • PUBACK:新たに発表されたメッセージ確認は、QoS 1からPUBLISHメッセージへの返信
  • である
  • PUBREC:QoS 2メッセージストリームの第1の部分は、メッセージ配信が
  • を記録したことを示す
  • PUBREL:QoS 2メッセージストリームの第2の部分は、メッセージパブリケーションが解放されたことを示す
  • PUBCOMP:QoS 2メッセージストリームの第3の部分は、メッセージ配信完了
  • を示す
  • SUBSCRIBE:クライアントがトピック
  • を購読
  • SUBACK:SUBSCRIBEメッセージの確認
  • UNSUBSCRIBE:クライアントがサブスクリプションを終了するメッセージ
  • UNSUBACK:UNSUBSCRIBEメッセージの確認
  • PINGREQ:心拍数(空き時間に1つ)
  • PINGRESP:心拍数確認
  • DISCONNECT:クライアントが接続を終了する前に、MQTTエージェント
  • に優雅に通知する
    MQTTエージェント
    市場にはかなりの高品質のMQTTエージェントがあり、その中でmosquittoはオープンソースの軽量級のC実現であり、MQTT 3.1とMQTT 3.1.1を完全に互換している.次にmosquittoを例にMQTTの使用を説明します.環境はUbuntu 14.04.1 LTSで、簡単に言えばMQTTエージェントとクライアントは同じサーバにインストールされています.mosquittoと組み合わせたクライアントをインストールします.
     
    sudo apt-get install mosquitto mosquitto-clients 

    単純テスト
    完全なMQTTの例には、エージェント、パブリッシャ、サブスクライバが含まれます.テストは次のステップに分けられます.
  • サービスmosquittoを開始します.
  • 購読者mosquitto_を通過subは、指定したトピックのメッセージを購読します.
  • パブリッシャーmosquitto_pubは、指定したトピックのメッセージを発行します.
  • エージェントサーバは、このトピックのメッセージをサブスクライバにプッシュする.

  • この例では、パブリッシャ、エージェント、サブスクライバはlocalhsotですが、実際には3つのデバイスは同じではありません.mosquittoでは-h(--host)でホスト名(hostname)を設定できます.この簡単なテストケースを実現するには、プロキシサーバ、パブリッシャ、サブスクライバの3つのコンソールをlinuxで開く必要があります.

    エージェントサービスの開始
    mosquitto-v[-v]より多くのデバッグ情報を印刷
    トピックの購読
    mosquitto_sub-v-t sensor[-t]テーマを指定します.ここではsensor[-v]のデバッグ情報をより多く印刷します.
    公開内容
    mosquitto_pub-t sensor-m 12【-t】指定トピック【-m】指定メッセージ内容
    実行結果
    パブリッシャーがメッセージをプッシュすると、サブスクライバは次のsensor 12を取得し、プロキシ・サーバ・コンソールに接続、メッセージ・パブリケーション、心拍などのデバッグ情報が表示される.MQTTプロトコルに関するプロセスは、プロキシサーバのデバッグ出力によって理解できます.
     
    アカウントパスワードの設定
     
    Mosquittoサーバのプロファイルは/etc/mosquitto/mosquitto.confは,ユーザ認証の方式と読み出しの構成についてこのファイルで構成する.
           
    allow_anonymous false
    
            
    password_file /etc/mosquitto/pwfile
    
      topic(  )   
    acl_file /etc/mosquitto/acl
    
         
          
        'chisj'  ’chisj‘,
    #mosquitto_passwd -c /etc/mosquitto/pwfile chisj
    
    

    Topicとユーザーの関係を追加
      Mosquitto
    1.  Ctrl+C  mosquitto
    2.mosquitto-c /etc/mosquitto/mosquitto.conf
    
    (   )     :
    mosquitto_sub -h ip   -t mtopic
    
    (   )   (   ,  )  
    mosquitto_pub -h 192.168.1.100 -t mtopic -u chisj -P chisj -m "test"
    
    (   )     :
    mosquitto_pub -h 192.168.1.100 -t mtopic -u chisj -P chisj -m "test"
    
      :   
      :https://www.jianshu.com/p/a13e888c93fb
      :  
            。             ,          。