MQTT の概要

MQ テレメトリー・トランスポート (MQTT) を使用してモバイル・アプリケーション間でメッセージを送信する方法について説明します。 このプロトコルは、ワイヤレス・ネットワークおよび低帯域幅ネットワークでの使用を目的としています。 MQTT を使用するモバイル・アプリケーションは、 MQTT ライブラリーを呼び出すことによってメッセージを送受信します。 メッセージは、 MQTT メッセージング・サーバーを介して交換されます。 MQTT クライアントとサーバーは、モバイル・アプリケーションに確実にメッセージを配信するという複雑さに対処し、ネットワーク管理のコストを抑えます。

MQTT アプリケーションは、スマートフォンやタブレットなどのモバイル・デバイスで実行されます。 MQTT は、センサーからデータを受信したり、センサーをリモート側で制御したりするためにテレメトリーにも使用されます。 MQTT は、モバイル・デバイスおよびセンサー向けに、送達保証付きの拡張性の高いパブリッシュ/サブスクライブ・プロトコルを提供します。 MQTT メッセージを送受信するには、 MQTT クライアント・ライブラリーをアプリケーションに追加します。

MQTT クライアント・ライブラリーは小さいです。 ライブラリーは、 MQTT サーバーに接続されている他の MQTT アプリケーションとメッセージを送受信するメールボックスのように機能します。 MQTT アプリケーションは、応答を待機しているサーバーに接続したままではなく、メッセージを送信することにより、バッテリー寿命を節約します。 ライブラリーは、 MQTT version 3.1 プロトコルを実行している MQTT サーバーを介して他のデバイスにメッセージを送信します。 ユーザーは特定のクライアントにメッセージを送信することも、パブリッシュ/サブスクライブ・メッセージングを使用して多数のデバイスに接続することもできます。

MQTT クライアント・ライブラリーは、 MQTT プロトコルを使用して、モバイル・デバイスおよびセンサー用のアプリケーションを MQTT サーバーに接続します。

IBM® MessageSightIBM WebSphere® MQMQTT サーバーです。 大容量の MQTT クライアント・アプリケーションを接続でき、 MQTT ネットワークと IBM WebSphere MQ ネットワークを一緒に接続できます。 MQTT サーバーの概要を参照してください。 IBM WebSphere MQIBM MessageSight は両方とも、モバイル・デバイスやセンサーで実行されている外部 Web アプリケーションと、企業内で実行されているその他のタイプのパブリッシュ/サブスクライブ・アプリケーションおよびメッセージング・アプリケーションとの間のブリッジを形成できます。 このブリッジにより、モバイル・デバイスとセンサーを組み込んだ スマート・ソリューション の作成が容易になります。

スマート・ソリューションは、モバイル・デバイスおよびセンサー・デバイス上で実行されるアプリケーションのために、インターネットで使用可能な情報の宝庫の錠を開けます。 遠隔測定に基づくスマート・アプリケーションの例として、スマート電力とスマート・ヘルスケア・サービスの 2 つが挙げられます。

図1: スマート電力計量
MQTT メッセージでサービス・プロバイダーに送信されるすべての住宅のエネルギー使用量データのイメージ。 WebSphere MQ Telemetry は、エネルギー使用量データの分析に基づいて住宅制御コマンドに返送します。
図2: スマート・ヘルスケア・モニター
病院または医師に送信され、メッセージ・アラートまたはフィードバックを返す医療データを含む MQTT メッセージの画像。
  • 遠隔測定アプリケーションは、医療データを病院と医師に送信します。
  • MQTT メッセージ・アラートまたはフィードバックは、ヘルス・データの分析に基づいて送信できます。
  • 詳しくは、 テレメトリー・シナリオ: 在宅患者モニターを参照してください。

MQTT protocol用の独自のアプリを作成することで、 MQTT を小さなデバイスに組み込むことができます。 これを行うために、 IBM には、 MQTT上で実行されるアプリケーションをサポートするクライアント・ライブラリーが用意されています。 MQTT クライアントの概要を参照してください。 IBM には、 iOS アプリケーション用、 Android アプリケーション用[V7.5.0.1 2013 年 3 月]、および JavaScript プラットフォームに依存しない Web アプリケーション用のブラウザー・クライアント用のクライアント・ライブラリーが用意されています。 [V7.5.0.1 2013 年 3 月] JavaScript クライアント・ページは、 WebSocketsを介して MQTT プロトコルを使用して IBM MessageSight および IBM WebSphere MQ に接続します。 IBM には、 Linux® および Windows上の C および Java 用の MQTT サンプル・アプリケーションも用意されています。

C および Java ライブラリーは、 iOSAndroidWindows、およびいくつかの UNIX and Linux プラットフォームで稼働します。 MQTT クライアント・ライブラリーの C ソース・コードを他のプラットフォームに移植することができます。 C および Java 用の MQTT クライアント・ライブラリーは、 Eclipse Paho プロジェクトからオープン・ソース・ライセンスで使用できます。 Eclipse Pahoを参照してください。 MQTT protocol 仕様は開いており、 MQTT.orgから入手できます。

MQTT protocol

MQTT protocol は、クライアントが小さいという意味で軽量であり、ネットワーク帯域幅を効率的に使用します。 MQTT プロトコルは、送達保証転送と応答不要送信転送をサポートします。 このプロトコルでは、メッセージ送達はアプリケーションから分離されています。 アプリケーションにおける分離の程度は、 MQTT クライアントと MQTT サーバーの書き込み方法によって異なります。 送達が分離されていると、アプリケーションはサーバー接続とメッセージ待機から解放されます。 対話モデルは E メールに似ていますが、アプリケーション・プログラミングに合わせて最適化されています。

MQTT V3.1 プロトコルが公開されます。 MQTT V3.1 プロトコル仕様を参照してください。 この仕様は、このプロトコルに関する以下の際立ったフィーチャーを規定しています。

  • パブリッシュ/サブスクライブ・プロトコルです。
    • 1 対多メッセージ配布を提供することに加え、パブリッシュ/サブスクライブによってアプリケーションを分離します。 どちらのフィーチャーも多数のクライアントを持つアプリケーションで有用です。
  • メッセージ・コンテンツにはまったく依存しません。
  • 基本的なネットワーク接続を提供する TCP/IP を介して稼働します。
  • メッセージ送信のサービスの品質には次の 3 種類があります。
    最高 1 回
    メッセージは、基になるインターネット・プロトコル・ネットワークのベスト・エフォートに従って送信されます。 メッセージ損失が発生する可能性があります。
    このサービスの品質は、例えば環境センサー・データの通信に使用します。 次の読み取りがすぐ後にパブリッシュされるのであれば、個別の読み取りが失われたかどうかは問題になりません。
    最低 1 回
    メッセージ送信は保証されますが、重複が発生する可能性があります。
    正確に 1 回
    メッセージは正確に 1 回着信することが保証されます。
    このサービスの品質は、例えば請求システムに使用します。 メッセージの重複や逸失は、不都合を生じさせたり、誤った課金を負わせることになったりする可能性があります。
  • ネットワーク上のメッセージ・フローの管理の点でコストが抑えられます。 例えば、固定長ヘッダーは 2 バイトのみの長さであり、プロトコル交換はネットワーク・トラフィックが削減されるように最小化されています。
  • これには、 MQTT サーバーからのクライアントの異常切断をサブスクライバーに通知する 「遺言」 機能があります。 「 遺言パブリケーション」を参照してください。

MQTT version 3.1 は、 IBM IBM WebSphere MQ および IBM MessageSightによってサポートされます。 MQTT は TCP/IP を介してインプリメントされます。 TCP/IP 以外のネットワークでは、別のバージョンのプロトコル MQTT-Sを使用できます。 MQTT-S version 1.2 仕様 (Java specification)を参照。

MQTT コミュニティー

IBM は、 IBM MessageSight および IBM WebSphere MQ用のアプリケーションを作成する MQTT 開発者のために、 IBM Developer Messaging community を実行しています。

MQTT.org では、 MQTT プロトコルの実装と拡張機能について学習し、検討することをお勧めします。

MQTT は、 Eclipse テクノロジー・プロジェクトの下にあるオープン・ソースの Eclipse プロジェクトです。 Paho コミュニティは、オープンソースのクライアントとサーバーを開発しています。 Eclipse Pahoを参照してください。