目次


MQTT、IBM MessageSightのご紹介 - IBM MessageSight for Developersを使ってMQTTを体験する

Comments

1. MQTTとは

MQTT(MQ Telemetry Transport)は、センサーやデバイス、低帯域で信頼性の低いネットワーク上での通信向けに設計された、machine-to-machine (M2M)や"Internet of Things"を実現する、極めてシンプルで軽量なパブリッシュ/サブスクライブ型のメッセージング・プロトコルです。センサーやデバイス等の少ないリソースでも軽量かつ効率的な通信が可能で、送受信のデータパケットのサイズは最小化されています。また、一方向、1対1の通信のみでなく、双方向、一対多の柔軟な通信が可能で、軽量でバッテリー消費量も少ないことから、モバイル向けにも注目されているプロトコルです。

MQTTは1999年にIBM と Eurotech社のメンバーにより考案され、以来、スマートメーターやパイプライン、河川の監視、医療、自動車等、さまざまな業界で採用されてきています。プロトコル仕様はロイヤリティーフリーとして公開されており、2011年にIBM とEurotechは、MQTTのクライアントコードをEclipse Foundationに寄贈し、Pahoプロジェクトを通してMQTTのオープンソース実装を公開しました。
2013年現在、MQTTは、OASISにおける標準化に向けてのプロセスが進められています。

MQTTには、以下のような特徴があります。

  • オープンでロイヤリティーフリー
    MQTTは多くのデバイスやプラットフォームに容易に実装しやすいように、プロトコル仕様は公開されており、誰でもモジュールをダウンロードしてロイヤリティーフリーで利用することができます。
  • Publish/Subscribe型のメッセージングモデル
    TCP/IPベースのプロトコルで、トピックと呼ばれるオブジェクトを介して通信を行います。アプリケーション同士が疎結合となり、アプリケーションは、送信先の相手を意識する必要はありません。また、一対多でメッセージを配布することができ、リアルタイムでのプッシュ型の通信も可能となります。
  • 低帯域、不安定なネットワーク上での通信に最適
    MQTTのメッセージ・ヘッダーは最小化されているため(最低限必要なヘッダーは2バイト)、ネットワークのトラフィック量を抑えることができます。 リアルタイムでのプッシュ型のメッセージ配信においては、ポーリングが必要となるHTTPと比較して特にネットワーク使用率を効果的に低く抑えることができます。
  • 要件に応じて、送達保証のレベルをQoS(Quality of Service)オプションで指定
    以下の3つのQoSオプションのいずれかを指定することができます。
    0 : at most once : メッセージは1回のみ送信される(送信先に届くかは保証しない)
    1 : at least once : メッセージは最低1回は送信先に送られる
    2 : exactly once : メッセージは必ず正確に1回送信先に送られる
    送達を制御するためにストレージへの情報の保持や追加の通信のオーバーヘッドがかかるため、QoSのレベルはメッセージ送信のパフォーマンスに影響します。
  • 少ないCPU、メモリーリソースのデバイスに特化した設計
    プロトコル・ヘッダーは最小化されており、より小さいメモリーとCPU使用で稼動するよう設計されています。これにより、バッテリー消費を低減させることができます。
  • シンプルなAPIによる容易な実装
    CONNECT、PUBLISH、SUBSCRIBE、DISCONNECTといったシンプルなMQTTのAPIで容易に実装ができます。
  • ネットワーク切断時や再接続時の柔軟なメッセージ送信
    MQTTクライアントが切断されていた場合に送信されたメッセージをサーバーで蓄積し、クライアント再接続時に再送することができます。異常な切断が発生した場合に、「Last Will and Testament (遺言)」機能によって、異常切断の発生を通知することもできます。

※<補足>パブリッシュ/サブスクライブ型通信モデル

  • 送信プログラムと受信プラグラムが”Topic”(トピック)を介して1対Nで通信するモデル
    • 送信側(パブリッシャー)が受信側(サブスクライバー)を意識せずにデータ送受信を行う
    • サブスクライバーは受信したいトピックにサブスクライブ(購読)登録を行う
    • パブリッシャーは、送信したいデータをトピックに対してパブリッシュ(送信)する
    • 両者の間には必ずPub/Subブローカーが介在し、データの管理、配信を行う
 

2. IBM MessageSightとは

IBM MessageSightは、膨大な数の接続と大量のメッセージ集配信を可能にするメッセージング専用のアプライアンスとして新たに開発されました。Machine-to-Machine (M2M)のゲートウェイとしてMQTTプロトコルの通信をサポートし、また、DMZに配置可能なアプライアンスとしてのセキュリティを実装しています。

IBM MessageSightの特徴は以下の通りです。

  • 高パフォーマンス
    • 1台のMessageSightで、同時に100万台の接続が可能
    • 1000万件/秒以上のノンパーシステント・メッセージング処理
    • ハードウェア、ファームウェアをメッセージング処理に最適化
  • 高セキュリティ
    • IBMの署名、暗号化によりファームウェアを保護
    • 専用ハードウェア、専用OSによりDMZへの配置が可能な高セキュリティ
    • きめ細かいアクセス制御のための最適化されたポリシーベースの設定機能
    • SSL v3, TLS v1, TLS v1.1, TLS v1.2のサポート
    • Federal Information Processing Standard (FIPS) 140-2 Level 1 対応
  • 高機能、容易性
    • 最適化された容易な各種設定機能
    • JMS、WebSphere MQへの接続機能
    • High Availability機能による冗長構成
    • 30分程度の初期設定ですぐに利用可能
    • 分かりやすいWeb管理画面とコマンドライン・インターフェース
    • 自動的なモニターとGUI画面表示

IBM MessageSightは以下のプロトコルとの接続をサポートします。

  • MQ Telemetry Transport (MQTT) V3.1
  • MQTT over HTML5 WebSockets
  • Java Message Service (JMS) V1.1
  • WebSphere MQ
IBM MessageSightの接続性

3. IBM MessageSightの構成概念

IBM MessageSightには、Message Hub、Endpoint、Connection Policy、Messaging Policyという4つの管理オブジェクトがあり、これらを構成することで、メッセージング処理を行うための設定を行うことができます。

  • Message Hub
    Message Hubは、他のオブジェクト(Message Hub、Connection Policy、Messaging Policy)をグループ化する単位として定義します。Message Hubは、アプリケーションの特性と目的に応じて、複数定義することができます。
  • Endpoint
    Endpointは、Message Hubに含まれる管理オブジェクトです。クライアントがMessage Hubに接続するための情報をEndpointに設定します。接続を受け付けるIPアドレス、ポート番号やクライアントの種類(MQTT、JMS)、最大メッセージサイズ等を設定します。EndpointはMessage Hub内に複数定義できます。
  • Connection Policy
    Connection Policyは、Endpointに紐付けるオブジェクトで、Endpointに設定されている接続先に接続できるユーザーを制御するための設定を行います。クライアントのIPアドレスやClient ID、ユーザー名、グループ名等をベースに設定を行うことができます。Endpointは最低1つのConnection Policyを含まなければなりません。
  • Messaging Policy
    Messaging Policyは、Endpointに紐付けるオブジェクトで、トピックやキュー等の宛先に対して、どのユーザーに何の操作を許可するかを設定します。
    クライアントのIPアドレスやClient ID、ユーザー名、グループ名等をベースに設定を行うことができます。Endpointは最低1つのMessaging Policyを含まなければなりません。
IBM MessageSightの管理オブジェクト

4. IBM MessageSight for DevelopersでMQTTを体験

4.1. IBM MessageSightのダウンロードと起動

それでは、実際に無償で利用可能な「IBM MessageSight for Developers」を使って、MQTTを体験してみましょう。

ダウンロードサイトにアクセスし、「IBM MessageSight for Developers」をダウンロードします。

 

「1.0.0.1-IMA-DeveloperImage.zip」がダウンロードされるので、解凍します。

 

「IBM MessageSight for Developers.pdf」を参照して、設定方法を確認することができます。

IBM MessageSight for Developersは以下の仮想環境ソフトウェア上で稼動することができます。

  • Oracle VirtualBox 4 or later
  • VMware Fusion 5 or later
  • VMware Player 5
  • VMware Workstation 8
  • VMware ESX/ESXi 4 or later

今回は、VMWare Playerを使います。

VMWare Playerを起動し、「仮想マシンを開く」を選択し、ダウンロードしたOVAファイル「IBMMessageSightV1.0.0.1.ova」を選択します。

 

「新しい仮想マシンの名前」、「新しい仮想マシンのストレージ パス」を指定して、「インポートをクリックします。」

 

「インポート」が実行されます。

 

インポートが完了したら、「仮想マシン設定の編集」をクリックして、仮想マシンの設定を確認します。

 

メモリは4GB、プロセッサは2に設定されています。ネットワークアダプタの設定を環境に合わせて変更します。ここでは1つ目のネットワークアダプタ(eth0)をNATに変更して、「OK」をクリックして画面を閉じます。

 

「仮想マシンの再生」をクリックして、仮想マシンを起動します。

 

仮想マシンの起動が開始されます。

 

コンソールにログインプロンプトが表示されたら、デフォルトのユーザーIDとパスワードでログインします。

  • ユーザーID : admin
  • パスワード : admin

ログインすると、Initial set-up wizardが起動するので、ネットワークの初期設定を行います。
最初の「Which interface would you like to configure ( default is eth0) : 」の部分で「Enter」を実行して、eth0への設定へ進みます。 

 

Use DHCP for the Ethernet port (yes/no; default no) : 」と出力されるので、ここではDHCPを使用しないので「Enter」を実行して進みます。
IPアドレス、default gatewayを環境に合わせて指定すると、初期設定が終了します。

 

これでIBM MessageSightのWebUIが利用可能になりました。
ブラウザを起動し、コンソールに表示されているURLにアクセスしてIBM MessageSightのWebUIにアクセスします。
ここでは、URLはhttps://192.168.219.10:9087/ となっています。ポート9087は、WebUIのデフォルトのポート番号です。
デフォルトのユーザーID (admin)、パスワード(admin)でログインします。

 

License Agreementの画面が表示されるので、「I Agree」をクリックして受け入れます。

 

First Stepsの画面で、adminユーザーの新しいパスワードを指定して、「Save」をクリックして保存します。

 

First stepsの一番下の「Save and Close」をクリックしてFirst stepsを終了します。

 

IBM MessageSightのホーム画面が表示されます。

 

IBM MessageSightにはデフォルトでMessage Hubが設定されています。WebUIのメニューからで「Messaging」→「Message Hubs」と選択し、設定を確認します。

 

以下のようにデフォルトの「DemoHub」というMessage Hubが1つ設定されています。画面上でDemoHubをクリックして、yes ボタンをクリックして、設定の詳細を確認してみましょう。

 

DemoHub内に設定されているオブジェクトの詳細が確認できます。「Endpoints」タブをクリックすると設定されているEndpointのポート番号を確認することができます。この後の手順では、このデフォルトのMessage Hubを利用して確認を行います。

 

4.2. MQTTクライアントのダウンロードと実行

ダウンロードサイトにアクセスし、「Mobile Messaging & M2M Client Pack」をダウンロードします。

 

「1.0.0.3-WS-MQCP-MA9B」がダウンロードされるので、解凍します。解凍したフォルダのSDK/WebContentフォルダの下のindex.htmlをブラウザで開くと、MQTTクライアントユーティリティーが起動します。

 

Utilityタブをクリックし、ServerのIPアドレスに先程設定をしたIBM MessageSightのIPアドレス(この環境では、192.168.219.10です。)
を指定し、ポート番号にはデフォルトで設定されていた「16102」を指定し、「Connect」をクリックします。

 

双方向でのメッセージ送受信を確認するため、もう1つユーティリティー画面を起動し、同様に「Connect」します。

ここでIBM MessageSightに接続されているか確認してみましょう。IBM MessageSightのWebUIに戻り、メニューから「Monitoring」→「Endpoints」を選択します。

 

以下のようにアクティブな接続数が確認できます。(更新されていない場合は「Refresh」ボタンを押してください。)2つのクライアントが接続していることが分かります。

 

MQTTクライアントユーティリティーの1つをサブスクライバー、もう1つをパブリッシャーとしてメッセージの送受信を確認してみましょう。
先程のクライアントユーティリティーの画面に戻り、「Receive」のセクションでTopic Nameに「sample/abc」と入力し、「Subscribe」をクリックします。

 

もう一方のユーティリティーの画面で「Publish」のセクションでTopicに「sample/abc」と入力し、Message欄にメッセージを入力し、「Publish」をクリックするとメッセージがPublishされます。

 

Subscribeしていたクライアントの画面を確認すると、以下のようにメッセージが受信できていることが分かります。

 

IBM MessageSightのWebUIのメニューから「Monitoring」→「Subscriptions」を選択すると、以下のようにSubscriptionの内容を確認できます。

 

ここまでの部分で、基本的なMQTTのPublish、Subscribeが確認できました。このMQTTクライアントユーティリティーとIBM MessageSight for Developersを使って、そのほかのMQTTの機能やMessageSightの機能を確認できます。興味のある方は是非試してみてください。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=WebSphere
ArticleID=951062
ArticleTitle=MQTT、IBM MessageSightのご紹介 - IBM MessageSight for Developersを使ってMQTTを体験する
publish-date=11132013