Java 用の MQTT クライアントの概要

IBM® MessageSight または IBM WebSphere® MQ のいずれかを MQTT サーバーとしてを使用して、 MQTT Client for Java サンプル・アプリケーションを稼働させます。 サンプル・アプリケーションは、 IBMの MQTT Software Development Toolkit (SDK) のクライアント・ライブラリーを使用します。 SampleAsyncCallBack サンプル・アプリケーションは、 Android およびその他のイベント・ドリブン・オペレーティング・システム用の MQTT アプリケーションを作成するためのモデルです。

始める前に

  • MQTT client for Java アプリケーションは、 JSE 1.5 以上の Java 互換性のあるプラットフォームであれば、どのプラットフォームでも実行できます。 IBM Mobile Messaging および M2M Client Packのシステム要件を参照してください。
  • クライアントとサーバーの間にファイアウォールがある場合は、 MQTT トラフィックをブロックしていないことを確認してください。

本タスクについて

このタスクの目的は、 MQTT Client for Java サンプル・アプリケーションを作成して実行し、それを MQTT version 3 サーバーとして IBM WebSphere MQ または IBM MessageSight に接続して、メッセージを交換できることを確認することです。

このタスクに従って、 Eclipse ワークベンチまたはコマンド行からサンプル・アプリケーションを実行します。 この例のステップは、 Windows用です。 わずかな変更で、 JSE 1.5 以上をサポートする任意のプラットフォームでサンプル・アプリケーションを実行できます。

IBM WebSphere MQ に接続するアプリケーションを実行するための環境が構成されている IBM WebSphere MQと同じサーバー上でアプリケーションを実行できます。 コマンド行からの MQTT サービスの構成 のタスクに従って、 Windows または Linux®IBM WebSphere MQ Telemetry オプションを指定して IBM WebSphere MQ をインストールおよび構成します。 環境をインストールして構成したら、サンプル・アプリケーション MQTTV3Sample を実行して、インストール済み環境を検査します。

手順

  1. クライアント・アプリケーションを接続できる MQTT サーバーを選択します。

    サーバーは MQTT version 3.1 プロトコルをサポートしている必要があります。 IBM のすべての MQTT サーバー ( IBM WebSphere MQ および IBM MessageSightを含む) がこれを行います。 MQTT サーバーの概要を参照してください。

  2. オプション: MQTT サーバーを構成します。
  3. Mobile Messaging および M2M Client Pack をダウンロードして、 MQTT SDK をインストールします。
    インストール・プログラムは用意されておらず、ダウンロードしたファイルを展開するだけです。
    1. Mobile Messaging および M2M Client Packをダウンロードします。
    2. SDK をインストールするフォルダーを作成します。

      フォルダーの名前を MQTT にすることもできます。 ここでは、このフォルダーへのパスを sdkroot として示します。

    3. 圧縮された Mobile Messaging および M2M Client Pack ファイルの内容を sdkrootに展開します。 展開すると、 sdkroot\SDKから始まるディレクトリー・ツリーが作成されます。
  4. Java Development Kit (JDK) バージョン 6 以降をインストールします。

    Java アプリ for Androidを開発しているため、 JDKOracleからのものでなければなりません。 JDK は、 Java SE Downloadsから入手できます。

  5. 1 つ以上の MQTT Client for Java サンプル・アプリケーションをコンパイルして実行します。

    SDK には、以下の MQTT クライアント・サンプル Java ・アプリが含まれています。

    MQTTV3Sample
    このサンプルは、 IBM WebSphere MQ および com.ibm.micro.client.mqttv3.jar パッケージへのリンクにも含まれています。
    Sample
    SamplePaho パッケージ内にあり、 org.eclipse.paho.client.mqttv3 パッケージへのリンクです。 これは MQTTV3Sampleに似ています。各 MQTT アクションが完了するまで待機します。
    SampleAsyncWait
    SampleAsyncWaitorg.eclipse.paho.client.mqttv3 パッケージに含まれています。 非同期 MQTT API を使用し、アクションが完了するまで別のスレッドで待機します。 メイン・スレッドは、 MQTT アクションの完了を待機しているスレッドで同期されるまで、他の作業を行うことができます。
    SampleAsyncCallBack
    SampleAsyncCallBackorg.eclipse.paho.client.mqttv3 パッケージに含まれています。 これは、非同期 MQTT API を呼び出します。 非同期 API は、 MQTT が呼び出しの処理を完了するのを待機せず、アプリケーションに戻ります。 アプリケーションは他のタスクを実行してから、処理の必要な次のイベントの到着を待機します。 MQTT は、処理を完了すると、イベント通知をアプリケーションに送り返します。 イベント・ドリブン MQTT インターフェースは、 Android およびその他のイベント・ドリブン・オペレーティング・システムのサービスおよびアクティビティーのプログラミング・モデルに適しています。
    例として、 mqttExerciser サンプルがサービスおよびアクティビティーのプログラミング・モデルを使用して MQTTAndroid に統合する方法を示します。
    mqttExerciser
    mqttExerciser は、 Androidのサンプル・プログラムです。 これは別個にビルドされて実行されるので、別の場所で説明されています。 Android 上の Java 用 MQTT クライアントの概要を参照してください。

結果

MQTT サーバーとして IBM WebSphere MQ または IBM MessageSight に接続されている MQTT Java サンプル・アプリケーションをコンパイルして実行しました。

次のタスク

Javadoc 参照情報を確認します。 「 Eclipseからすべての MQTT クライアント・サンプル Java アプリケーションをコンパイルして実行する」のステップ 3 を参照してください。 あるいは、 Mobile Messaging および M2M Client PackSDK\clients\java\doc\javadoc ディレクトリーにある Javadoc html ファイルを開きます。

コマンド行からの Paho サンプル・プログラムのコンパイルと実行

コマンド行から Paho サンプル・アプリケーション Sample.java をコンパイルして実行します。 このサンプルは、 MQTT SDK にあります。 このサンプルは、 org.eclipse.paho.client.mqttv3 パッケージ内の MQTT Paho クライアント・ライブラリーを使用して作成されています。 これは、 MQTT のパブリッシャーとサブスクライバーを示しています。 同じディレクトリーにある他の 2 つの Paho サンプルを同じ方法で作成して実行することができます。 これらは、 MQTT ライブラリーを非同期に呼び出すことによって異なります。

始める前に

メインタスクのステップ 1 から 4 を実行して、 MQTT サーバーを構成し、 Mobile Messaging および M2M Client Packをダウンロードします。

本タスクについて

SDK クライアントのサンプル・サブディレクトリー SDK\clients\java\samplesから Sample.java をコンパイルして実行します。 Java コードは、ディレクトリー SDK\clients\java\samples\org\eclipse\paho\sample\mqttv3appにあります。

手順

  1. 選択したプラットフォームで Sample をコンパイルして実行するためのスクリプトを、クライアントの samples ディレクトリーに作成します。

    以下のスクリプトは、 Windows上でサンプルをコンパイルして実行します。

    図1: Sample.java のコンパイルおよび実行
    @echo on
    setlocal
    set classpath=
    set JAVADIR=C:\Program Files\IBM\Java70\bin
    "%JAVADIR%\javac" -cp ..\org.eclipse.paho.client.mqttv3.jar .\org\eclipse\paho\sample\mqttv3app\Sample.java
    start "Sample Subscriber" "%JAVADIR%\java" -cp  .;..\org.eclipse.paho.client.mqttv3.jar org.eclipse.paho.sample.mqttv3app.Sample -a subscribe -b localhost -p 1883
    @rem Sleep for 2 seconds
    ping -n 2 127.0.0.1 > NUL 2>&1
    "%JAVADIR%\java" -cp  .;..\org.eclipse.paho.client.mqttv3.jar org.eclipse.paho.sample.mqttv3app.Sample -b localhost -p 1883
    pause
    endlocal
  2. スクリプトを実行します。
    結果:
    図2: MQTTV3Sample サブスクライバー
    Connected to tcp://localhost:1883 with client ID SampleJavaV3_subscribe
    Subscribing to topic "Sample/#" qos 2
    Press <Enter> to exit
    Time:   2012-11-09 17:23:22.718  Topic: Sample/Java/v3  Message:        Message
    from blocking MQTTv3 Java client sample  QoS:   2
    図3: MQTTV3Sample パブリッシャー
    Connecting to tcp://localhost:1883 with client ID SampleJavaV3_publish
    Connected
    Publishing at: 2012-11-09 17:22:07.734 to topic "Sample/Java/v3" qos 2
    Disconnected

    サブスクライバー・アプリケーションを実行したままにしていると、その同じサブスクライバーを再び実行することはできません。 新しいサブスクライバーのクライアント ID は、以前のサブスクライバーのものと同じです。 同じクライアント ID を持つ 2 つの MQTT クライアントを同時に実行することはできません。 -i オプションを設定することにより、クライアント ID を設定して、複数の異なるサブスクライバーを同時に実行可能にすることができます。

    同じクライアントを再び実行する場合には、開始するための -c オプションを利用し、cleansession を false に設定してクライアントを開始することができます。 そのオプションにより、割り込みの生じたクライアント・セッションの動作を調べることができます。

  3. Enter キーを押すか、ウィンドウを閉じることにより、サブスクライバーを終了します。

次のタスク

SDK\clients\java\samples\org\eclipse\paho\sample\mqttv3app サブディレクトリー内の他のサンプルをコンパイルして実行するためのスクリプトを作成します。 図 1 のスクリプトをコピーし、 SampleSampleAsyncWait または SampleAsyncCallBackに置き換えます。 その他のサンプルは、同期 Sample プログラムの非同期バージョンです。

SampleAsyncWait
SampleAsyncWaitorg.eclipse.paho.client.mqttv3 パッケージに含まれています。 非同期 MQTT API を使用し、アクションが完了するまで別のスレッドで待機します。 メイン・スレッドは、 MQTT アクションの完了を待機しているスレッドで同期されるまで、他の作業を行うことができます。
SampleAsyncCallBack
SampleAsyncCallBackorg.eclipse.paho.client.mqttv3 パッケージに含まれています。 これは、非同期 MQTT API を呼び出します。 非同期 API は、 MQTT が呼び出しの処理を完了するのを待機せず、アプリケーションに戻ります。 アプリケーションは他のタスクを実行してから、処理の必要な次のイベントの到着を待機します。 MQTT は、処理を完了すると、イベント通知をアプリケーションに送り返します。 イベント・ドリブン MQTT インターフェースは、 Android およびその他のイベント・ドリブン・オペレーティング・システムのサービスおよびアクティビティーのプログラミング・モデルに適しています。
例として、 mqttExerciser サンプルがサービスおよびアクティビティーのプログラミング・モデルを使用して MQTTAndroid に統合する方法を示します。

非同期サンプルは、 MQTT アプリケーションが MQTT クライアントを待機している間にブロックする時間を削減する方法を示しています。 応答性とモバイル環境でのバッテリー寿命とを向上させるためには、メインスレッドでのブロック呼び出しをなくすことが重要です。

これらのサンプルは、 MQTT クライアントで非同期インターフェースを呼び出すための 2 つのパターンを示しています。
  1. SampleAsyncWait は、 MQTT がネットワーク対話を待機している間はブロックしません。
  2. SampleAsyncCallBack は、 MQTT クライアントがアクションを完了するのを待機することをブロックしません。 後者は、 JavaScript ページがブラウザーから MQTT クライアントを呼び出す場合に必要です。 JavaScript ページはブロックしてはなりません。 アクションへの応答は、通知を処理するために作成した MQTT イベント・ハンドラーを呼び出すメイン・ブラウザー・スレッドに返送する必要があります。

Eclipse からすべての MQTT クライアント・サンプル Java アプリケーションをコンパイルして実行します。

Mobile Messaging および M2M Client Packに含まれている MQTT クライアント・サンプル Java ・アプリケーションをコンパイルして実行します。 これらは、 MQTT のパブリッシャーとサブスクライバーを示しています。

本タスクについて

EclipseMQTT Java サンプル、 Sample、および MQTTV3Sample をコンパイルして実行します。 Samplesdkroot\SDK\clients\java\samples\org\eclipse\paho\sample\mqttv3app SDK クライアントのサブディレクトリーにあり、 MQTTV3Sample.javasdkroot\SDK\clients\java\samplesにあります。

手順

  1. Eclipse IDE for Java Developersをダウンロードします。
  2. EclipseMQTT Samples という名前の Java プロジェクトを作成します。
    1. 「ファイル」 > 「新規」 > 「Java プロジェクト」 を選択し、 MQTT Samplesと入力します。 「次へ」をクリックします。

      JRE が正しいバージョンまたはそれ以降のバージョンであることを確認してください。JSE は、バージョン 1.5 以降でなければなりません。

    2. 「Java 設定」 ウィンドウで、 「追加ソース・フォルダーのリンク」をクリックします。
    3. MQTT Java SDK フォルダーをインストールしたディレクトリーを参照します。 sdkroot\SDK\clients\java\samples フォルダーを選択して、 「OK」 > 「次へ」 > 「終了」をクリックします。
    4. Java 設定 ウィンドウで、 ライブラリー > 外部 Jar の追加 をクリックします。
    5. MQTT Java SDK フォルダーをインストールしたディレクトリーを参照します。 sdkroot\SDK\clients\java フォルダーを見つけて、 org.eclipse.paho.client.mqttv3.jar ファイルと com.ibm.micro.client.mqttv3.jar ファイルを選択し、 「開く」 > 「終了」をクリックします。

      MQTTV3Sample.java サンプルは com.ibm.micro.client.mqttv3.jar にリンクし、paho ディレクトリー・ツリー内のサンプルは org.eclipse.paho.client.mqttv3.jar にリンクします。 com.ibm.micro.client.mqttv3.jar は保持されるため、既存の MQTT アプリケーションは変更せずにビルドと実行を続行できます。

    MQTT Samples プロジェクトをビルドする際にいくつかの警告が発生しますが、エラーは発生しません。
    図4: MQTT Client for Java プロジェクト
    Eclipse Package Explorer の画面キャプチャー
  3. オプション: MQTT クライアント Javadoc をインストールします。

    MQTT クライアント Javadoc がインストールされている場合、Java エディターは吹き出しヘルプで MQTT クラスを記述します。

    1. Java プロジェクトで パッケージ・エクスプローラー > 「参照されるライブラリー」 を開きます。 org.eclipse.paho.client.mqttv3.jar >「プロパティー」を右クリックします。
    2. 「プロパティー」ナビゲーターで、 「Javadoc ロケーション」をクリックします。
    3. 「Javadoc ロケーション」 ページで Javadoc URL > 「参照」 をクリックし、 SDK\clients\java\doc\javadoc フォルダー >「OK」を見つけます。
    4. 検証 > 了解 をクリックします

      ドキュメンテーションを表示するためにブラウザーを開くよう促すプロンプトが出されます。

    5. com.ibm.micro.client.mqttv3.jar ファイルに対してこの手順を繰り返します。
  4. mqttv3app.Sample アプリケーションを実行するためのパブリッシャーおよびサブスクライバーのランタイム構成を作成します。
    1. Sample クラスを右クリックして、 実行 > 実行構成をクリックします。
    2. 「Java アプリケーション」 > 「新規」 を右クリックして、名前 SampleSubscriberを入力します。
    3. 「引数」タブをクリックし、プログラム引数に続けて 「適用」を入力します。
      -a subscribe -b localhost -p 1883
    4. -a subscribe パラメーターを省略して最後のステップを繰り返し、 SamplePublisher 構成を作成します。
  5. mqttv3app.Sample サブスクライバーの後にパブリッシャーを実行します。
    1. 実行 > 「実行構成」 をクリックします。
    2. SampleSubscriber > 「実行」をクリックします。
      「コンソール」 ビューを開きます。 サブスクライバーはパブリケーションを待機中です。
      Connected to tcp://localhost:1883 with client ID SampleJavaV3_subscribe
      Subscribing to topic "Sample/#" qos 2 
      Press <Enter> to exit
      
    3. SamplePublisher > 「実行」をクリックします。
      「コンソール」 ビューを開きます。 パブリッシャーによって作成されたパブリケーションが表示されます。
      Connecting to tcp://localhost:1883 with client ID SampleJavaV3_publish
      Connected
      Publishing at: 2012-11-09 14:09:29.859 to topic "Sample/Java/v3" qos 2
      Disconnected
    4. コンソール・ビューをサブスクライバー・コンソールに切り替えます。

      コンソールの切り替えアイコンは Eclipse 「コンソールの表示」ボタンの画面キャプチャーです。

      サブスクライバーはパブリケーションを受け取りました。
      ...
      Time: 2012-11-09 14:09:30.593  Topic: Sample/Java/v3  Message: Message from blocking MQTTv3 Java client sample  QoS: 2
  6. オプション: MQTTV3Sampleのパブリッシャーおよびサブスクライバーのランタイム構成を作成します。
    1. MQTTV3Sample クラスを右クリックし、 「実行」 > 実行構成をクリックします。
    2. 「Java アプリケーション」 > 「新規」 を右クリックして、名前 MQTTV3SampleSubscriberを入力します。
    3. 「引数」タブをクリックし、プログラム引数に続けて 「適用」を入力します。
      -a subscribe -b localhost -p 1883
    4. -a subscribe パラメーターを省略して最後のステップを繰り返し、 MQTTV3SamplePublisher 構成を作成します。
  7. オプション: MQTTV3Sample サブスクライバーの後にパブリッシャーを実行します。
    1. 実行 > 「実行構成」 をクリックします。
    2. MQTTV3SampleSubscriber > 「実行」をクリックします。
      「コンソール」 ビューを開きます。 サブスクライバーはパブリケーションを待機中です。
      Connected to tcp://localhost:1883
      Subscribing to topic "MQTTV3Sample/#" qos 2
      Press <Enter> to exit
    3. MQTTV3SamplePublisher > 「実行」をクリックします。
      「コンソール」 ビューを開きます。 パブリッシャーによって作成されたパブリケーションが表示されます。
      Connected to tcp://localhost:1883
      Publishing to topic "MQTTV3Sample/Java/v3" qos 2
      Disconnected
    4. コンソール・ビューをサブスクライバー・コンソールに切り替えます。

      コンソールの切り替えアイコンは Eclipse 「コンソールの表示」ボタンの画面キャプチャーです。

      サブスクライバーはパブリケーションを受け取りました。
      MQTTV3Sample/Java/v3
      Message: Message from MQTTv3 Java client
      QoS:  2