WebSphere MQ Everyplace シナリオ例の処理

このトピックに付属のサンプル・ファイル・セットを使って、 WebSphere MQ EveryplaceWebSphere Business Integration Event Broker ブローカーにすばやく接続できます。これらのファイルを使用すれば、以下を行うことができます。

提供されるサンプルを変更することができます。これ以降、Java ソース・コードをコンパイルする必要があります。

以下のステップは、サンプルの実行方法を示しています。 ディレクトリー構造の記述は、Windows 環境を想定しています。 他のプラットフォームをご使用の場合、 これらのパスを適切に変更してください。

  1. WebSphere Business Integration Event Broker 内の WebSphere MQ Everyplace、 および WebSphere MQ Everyplace 自体 (スタンドアロン) と通信するプログラムの実行場所である各システムごとに、 CLASSPATH を設定します。 以下を追加する必要があります。
    • install_dir\classes\mqimqe.jar;
    • install_dir\classes\MQeDevice.jar;
    • install_dir\classes\MQeExamples.jar;
    • install_dir\classes\MQeGateway.jar;
    • install_dir\classes\MQeMQBridge.jar;

    Windows の一部のバージョンでは、 1 つの CLASSPATH 設定につき 255 文字という制限があります。この制限による問題を回避するために、 クラスパスを新しい環境変数 (たとえば MQEPATH) に割り当てて、 %MQEPATH%;CLASSPATH に追加することができます。

  2. サンプル・ファイルをコピーします。下にある各リンクを右クリックし、「名前を付けて選択 (Select Target As...)」をクリックします。ファイルを保管したいディレクトリーを選択します。
    1. 次の .ini ファイルをコピーします。
    2. 以下の Java ソース・ファイルを同じディレクトリーにコピーします。
    3. Java ソース・ファイルをコンパイルします。
  3. WebSphere MQ Everyplace キュー・マネージャーを WebSphere MQ Everyplace クライアント上に作成します。 ファイル名は大文字小文字を区別します。表示されているとおりに指定してください。

    コマンド・プロンプトから、以下のように入力します。

    java examples.install.CreateQueueManager

    「構成ファイル (Configuration File)」ボックスで、 ClientQM1.ini ファイルを探して選択します (このファイルは、 ディレクトリー install_dir¥examples¥MQe にあります)。キューのディレクトリーを x:¥ClientQM1 に設定します (x は任意のドライブ名)。「OK」をクリックします。

    ClientQM1 という名前の WebSphere MQ Everyplace クライアント・キュー・マネージャーが作成され、 そのレジストリーは x:¥ClientQM1¥Registry に配置されます。

  4. WebSphere MQ Everyplace サーバー・キュー・マネージャーを WebSphere Business Integration Event Broker 内に作成します。 ファイル名は大文字小文字を区別します。表示されているとおりに指定してください。

    コマンド・プロンプトから、以下のように入力します。

    java examples.install.CreateQueueManager

    「構成ファイル (Configuration File)」ボックスで、 ServerQM.ini ファイルを探して選択します (このファイルは、 ディレクトリー install_dir¥examples¥MQe にあります)。キューのディレクトリーを x:¥ServerQM1 に設定します。「OK」をクリックします。

    ServerQM1 という名前の WebSphere MQ Everyplace サーバー・キュー・マネージャーが作成され、 そのレジストリーは x:¥ServerQM1¥Registry に配置されます。

    サンプルの ServerQM1.ini ファイルを開いて見ていくと、リスナーがポート 8081 で listen するよう設定されているのがわかります。この設定は、キュー・マネージャーの作成時に無視されます。 後で構成するときに、 MQeInput ノードの設定を構成ファイルから継承するよう選択した場合には、 このポート番号が使用されます。

    サーバー・キュー・マネージャーの作成時に以下のような内容のエラーが発生した場合、
    com.ibm.broker.mqimqe.examples.rule.AttributeRule
    CLASSPATHinstall_dir¥classes¥mqimqe.jar が正しく参照されていることを確認してください。
  5. メッセージ・フローを構成します。 既存のメッセージ・フローに WebSphere MQ Everyplace ノードを追加します。 あるいは、新しいフローを作成することもできます。「ブローカー・アプリケーション開発 (Broker Application Development)」パースペクティブに切り替えます。ノードをメッセージ・フローの中に追加します。 (パブリッシュ/サブスクライブでない) point-to-point メッセージングの場合、 MQeInput ノードと MQeOutput ノードをそれぞれ含める必要があります。 パブリッシュ/サブスクライブ・メッセージングの場合、 MQeInput ノードと Publication ノードをそれぞれ含める必要があります。
    MQeInput ノードの構成
    このサンプルの場合、 (「一般」タブの)「キュー名」だけを設定します。 各 MQeInput ノードごとに、異なるキュー名にする必要があります。 下記のステップ 8 では、 サンプルとしてキュー名 MQeInputQ1 を使用します。

    さらに、他の構成変更 (たとえばトレース・レベルの設定) を独自に行うこともできますが、 変更しなくてもこれらのスクリプトは実行できます。

    MQeOutput ノードの構成
    「宛先モード (Destination Mode)」 (「拡張 (Advanced)」タブの) が「宛先リスト (Destination List)」であることを確認してください。その他のフィールドはすべてブランクにします。
    Publication ノードの構成
    アクションは不要です。
  6. メッセージ・フローをデプロイします。

    メッセージ・フローを保管し、エラーがないかどうかを調べます。 メッセージ・フローを bar ファイルに追加し、それをブローカーにデプロイします。

    イベント・ログで、 正常にデプロイされたことを確認します。 メッセージ BIP4040I および BIP2056I が表示されるはずです。

    • クライアントが始動するとき、 クライアント・キュー・マネージャーも始動します。
    • MQeInput ノードが実行中で、 WebSphere Business Integration Event Broker ブローカーの実行場所のフロー内にデプロイされている場合に限り、 サーバー・キュー・マネージャーが始動します。
    • さらに、 point-to-point メッセージ・フロー (MQeInput から MQeOutput) をデプロイしたときにも、 WebSphere MQ Everyplace サーバー・キュー・マネージャーが始動します。
  7. WebSphere MQ Everyplace キュー・マネージャーをセットアップします。

    WebSphere MQ Everyplace キュー・マネージャーをセットアップするには、プログラム SetupMQeExample1 および SetupMQeExample2 をコンパイルして実行します。

    • SetupMQeExample1 は、 クライアント・キュー・マネージャーがサーバー・キュー・マネージャーと通信できるようにするための経路を作成します。
    • SetupMQeExample2 は、 このサンプルでメッセージ返信に使用する Inbox というキューをサーバー・キュー・マネージャー上に作成します。

    これらのプログラムには、以下のパラメーターを入力します。 SetupMQeExample1 では、 以下の 5 つのパラメーターがすべて必須です。SetupMQeExample2 では、最初の 2 つだけが必須です。

    1. WebSphere MQ Everyplace キュー・マネージャー名 (この例では ServerQM1)。
    2. WebSphere MQ Everyplace クライアント構成ファイルのパス (この例では ClientQM1.ini)。
    3. WebSphere MQ Everyplace サーバーの IP アドレス (この例では 1.23.45.678)。
    4. WebSphere MQ Everyplace サーバーが listen するポート。このポート番号は、 MQeInput ノードのプロパティー・ダイアログの「リスナー」タブに指定された「ポート」と一致する必要があります。 デフォルトでは、 MQeInput ノード・プロパティーのポート番号は 8081 です。
    5. WebSphere Business Integration Event Broker ブローカーのホストとなっている WebSphere MQ キュー・マネージャーの名前 (たとえば、WBRK_QM)。
    たとえば、コマンド・プロンプトでは、
    java SetupMQeExample1 ServerQM1 ClientQM1.ini 1.23.45.678 8081 WBRK_QM
  8. メッセージ・フローを介してメッセージを送信します。
    • point-to-point メッセージの場合、 SendMessages を使用します。 これによって、 MQeMsgObj クラスおよび MQeMbMsgObj クラスを使ってメッセージが送信されます。
    • パブリッシュ/サブスクライブ・メッセージの場合、 SendPubSubMessages を使用します。 これによって、メッセージのサブスクライブ、パブリッシュ、 読み取り、およびアンサブスクライブが実行されます。
    このどちらのプログラムも、 以下のような 5 つの必須パラメーターを表示される順序ですべて必要とします。
    1. WebSphere MQ Everyplace キュー・マネージャー名 (この例では ServerQM1)。
    2. WebSphere MQ Everyplace クライアント構成ファイルのパス (ClientQM1.ini)。
    3. WebSphere Business Integration Event Broker ブローカーのホストとなっている WebSphere MQ キュー・マネージャーの名前 (たとえば、WBRK_QM)。
    4. 入力を受け取る WebSphere MQ ブリッジ・キューの名前 (MQInput ノードの「キュー名」プロパティーで指定したキュー、 たとえば MQeInputQ1)。
    5. ブローカーから戻されるメッセージを受信する WebSphere MQ Everyplace キューの名前。サンプル・コードでは Inbox というキューを作成しますが、 定義済みの WebSphere MQ Everyplace キューがすでに存在する場合は、 そのキューを指定することもできます。
      このキューが存在しない場合、例外を受け取ります。
      検索されたメッセージには、予期されるフィールドのすべてが含まれているわけではありません。
      この例外を受け取ったものの、 キューがすでに作成済みの場合には、 取得試行の制限に達してメッセージを取得できないのが原因です。
    たとえば、point-to-point メッセージを送信するには、 コマンド・プロンプトで以下のように入力します。
    java SendMessages ServerQM1 ClientQM1.ini WBRK_QM MQeInputQ1 Inbox

    MQeMsgObject オブジェクトを使って構成されたブローカーに対してメッセージを送る場合、 すべてのフィールドがブローカーに送信されると、 出力は以下のようになります。

    Reading message from queue
    Message:         This is the payload
    Own message tag: My own tag with some data

    MQeMbMsgObject オブジェクトを使って構成されたブローカーに対してメッセージを送る場合、 ブローカーと互換性のあるフィールドだけが送信されると、 出力は以下のようになります。

    Reading message from queue
    Message:         This is the payload

    たとえば、publish/subscribe メッセージを送信するには、 コマンド・プロンプトで以下のように入力します。

    java SendPubSubMessages ServerQM1 ClientQM1.ini WBRK_QM MQeInputQ1 Inbox

    メッセージが正常に送られて受信されると、 出力は以下のようになります。

    Started queue manager: ClientQM1
    Subscribing to the topics:
    climate
    humidity
    temperature
    Put message to QM/queue: WBRK_QM/MQeInputQ2
    Publishing message to topic 'climate'
    Reading message from queue
    Topic:  climate
    Message: sunny
    un-subscribing from the topics:
    climate
    humidity
    temperature
    Put message to QM/queue: WBRK_QM/MQeInputQ2

    (ここで、MQeInputQ2 は使用する MQeInput ノードの名前)

    ブローカー・キュー・マネージャーおよび WebSphere MQ ブリッジ・キューへのメッセージ書き込みが試行された後、 次のような WebSphere MQ Everyplace 例外が表示される場合には、
    java.net.ConnectException: Connection refused
    以下の点を検査する必要があります。
    1. ブローカーが開始済みであること (mqsistart brokername)。
    2. SetupMQeExample1 実行時に指定したポート番号が、 MQeInput ノードの「リスナー」タブに指定されたポート番号と一致すること。
    3. そのポート番号で実行中のリスナーが存在すること (これを確認するには、 コマンド・プロンプトで netstat と入力します)。
    4. WebSphere MQ Everyplace ブリッジ・キュー名を指定済みであること。 (このパラメーターを指定しなくても、 正常にデプロイされたように見えます。)

関連概念
WebSphere MQ Mobile Transport

関連タスク
WebSphere MQ Everyplace リソースの保護
メッセージ・フローの作成
メッセージ・フロー・アプリケーションのデプロイ
デプロイメントの結果の検査

関連資料
MQeInput ノード
MQeOutput ノード