Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

IBM WebSphere MQ 受信アダプタの使用法

この章では、Ensemble IBM WebSphere MQ 受信アダプタ (EnsLib.MQSeries.InboundAdapterOpens in a new tab) のデフォルトの動作、およびプロダクションでのこのアダプタの使用法について説明します。以下のトピックについて説明します。

全般的な動作

まず、アダプタに対して指定する詳細について理解しておくと役立ちます。EnsLib.MQSeries.InboundAdapterOpens in a new tab クラスには、以下のような項目の指定に使用する実行時設定が用意されています。

  • 使用するキュー・マネージャ。

  • 使用するチャネルの指定形式。この指定形式には、使用するチャネルの名前、チャネルが使用するトランスポート、IBM WebSphere MQ サーバを実行するサーバ名 (または IP アドレス)、およびポートが含まれます。

  • チェックするメッセージ・キュー。

  • アダプタが新規入力をチェックする頻度を制御する、ポーリング間隔。

通常、受信 IBM WebSphere MQ アダプタ (EnsLib.MQSeries.InboundAdapterOpens in a new tab) は、指定されたキューを定期的に確認し、メッセージがあれば取得し、それらのメッセージを (EnsLib.MQSeries.MessageOpens in a new tab のインスタンスとして) 関連するビジネス・サービスに送信します。ユーザが作成および構成するビジネス・サービスでは、このメッセージを使用してプロダクションの他の部分と通信します。以下の図は、全体的なフローを示しています。

generated description: inbound

さらに具体的に説明します。

  1. アダプタが初期化されると、指定されたチャネルを使用して、指定されたキュー・マネージャおよびキューに接続されます。

  2. アダプタは定期的に OnTask() メソッドを実行します。このメソッドは、(メッセージが利用可能な場合に) キューからメッセージを取得します。ポーリング間隔は CallInterval 設定によって決定されます。

  3. アダプタがメッセージを取得すると、以下を実行します。

    1. アダプタは EnsLib.MQSeries.MessageOpens in a new tab クラスのインスタンスを作成し、メッセージ・データをインスタンスに入れます。

    2. アダプタは、関連するビジネス・サービス・クラスの内部 ProcessInput メソッドを呼び出し、EnsLib.MQSeries.MessageOpens in a new tab インスタンスを入力として渡します。

    Note:

    Ensemble で長い文字列が有効でない場合、メッセージの長さが 32 KB 未満でなければなりません。

  4. ビジネス・サービス・クラスの内部 ProcessInput() メソッドが実行されます。このメソッドは、すべてのビジネス・サービスが必要とする内部情報の保持など、基本的な Ensemble タスクを実行します。ビジネス・サービス・クラスが継承するこのメソッドは、カスタマイズや上書きを行いません。

  5. ProcessInput() メソッドがカスタムの OnProcessInput() メソッドを呼び出し、EnsLib.MQSeries.MessageOpens in a new tab インスタンスを入力として渡します。このメソッドの要件については、この後の “OnProcessInput メソッドの実装” で説明します。

応答メッセージは、同じパスを逆向きにたどります。

受信アダプタを使用するビジネス・サービスの作成

このアダプタをプロダクションで使用するには、ここに記載されているように新しいビジネス・サービス・クラスを作成します。後で、それをプロダクションに追加して、構成します。存在しなければ、適切なメッセージ・クラスを作成する必要もあります。"Ensemble プロダクションの開発" の “Ensemble メッセージの定義” を参照してください。

ビジネス・サービス・クラスの基本要件を以下に列挙します。

以下の例は、必要となる一般的な構造を示しています。

Class EMQS.Service Extends Ens.BusinessService 
{
Parameter ADAPTER = "EnsLib.MQSeries.InboundAdapter";

Method OnProcessInput(pInput As EnsLib.MQSeries.Message,
                      pOutput As %RegisteredObject) As %Status
{
   set tsc=$$$OK
   //your code here
   Quit tsc
}
}
Note:

スタジオには、上記のようなビジネス・サービス・スタブの作成に使用できるウィザードが用意されています。このウィザードにアクセスするには、[ファイル][新規作成] をクリックし、[プロダクション] タブをクリックします。次に [ビジネス・サービス] をクリックして [OK] をクリックします。このウィザードには、汎用入力引数が用意されています。ウィザードを使用する場合は、このアダプタに必要な特定の入力引数を使用するためにメソッド・シグニチャを編集することをお勧めします。入力引数のタイプは EnsLib.MQSeries.MessageOpens in a new tab です。

OnProcessInput() メソッドの実装

カスタム・ビジネス・サービス・クラスにおいて、OnProcessInput() メソッドは以下のシグニチャを持つ必要があります。

Method OnProcessInput(pInput As EnsLib.MQSeries.Message,
                      pOutput As %RegisteredObject) As %Status

ここで、pInput は、アダプタがこのビジネス・サービスに送信するメッセージ・オブジェクトです。これは EnsLib.MQSeries.MessageOpens in a new tab のインスタンスです。また、pOutput は、メソッド・シグニチャに必要な汎用出力引数です。

OnProcessInput() メソッドは、以下の一部またはすべてを実行する必要があります。

  1. MQ メッセージ (EnsLib.MQSeries.MessageOpens in a new tab) を調べて、それをどのように使用するかを決定します。この章の “受信メッセージの使用法” を参照してください。

  2. ビジネス・サービスから送信されることになる要求メッセージのインスタンスを作成します。

    メッセージ・クラスの作成方法は、"Ensemble プロダクションの開発" の “Ensemble メッセージの定義” を参照してください。

  3. 要求メッセージに対し、MQ メッセージの値を使用して適切にプロパティを設定します。

  4. ビジネス・サービスの適切なメソッドを呼び出して、要求をプロダクション内の宛先に送信します。具体的には、SendRequestSync()SendRequestAsync()、または (あまり一般的ではない) SendDeferredResponse() を呼び出します。詳細は、"Ensemble プロダクションの送信" の “要求メッセージの定義” を参照してください。

    これらの各メソッドは、ステータス (具体的には、%StatusOpens in a new tab のインスタンス) を返します。

  5. 必ず出力引数 (pOutput) を設定します。通常、受信した応答メッセージと同じように設定します。この手順は必須です。

  6. 適切なステータスを返します。この手順は必須です。

この章の最後のを参照してください。

受信メッセージの使用法

アダプタは、EnsLib.MQSeries.MessageOpens in a new tab のインスタンスをビジネス・サービスに送信します。このオブジェクトには、キューから取得したメッセージが含まれます。以下の 3 つのプロパティがあります。

  • Body — メッセージの本文

  • MessageID — メッセージ ID

  • BodySize — メッセージの長さを示す整数

Note:

Ensemble で長い文字列が有効でない場合、キューから取得されるメッセージの長さが 32 KB 未満でなければなりません。

以下のビジネス・サービスは、メッセージを取得し、EMQS.MessageProcessor という名前のビジネス・ホストにそのメッセージを転送します。

Class EMQS.Service Extends Ens.BusinessService 
{

Parameter ADAPTER = "EnsLib.MQSeries.InboundAdapter";

Method OnProcessInput(pInput As EnsLib.MQSeries.Message,
pOutput As EMQS.InboundMsg) As %Status
{
    //create Ensemble message to carry the retrieved MQ message
    Set inbound=##class(EMQS.InboundMsg).%New()
    Set inbound.Body=pInput.Body
    Set inbound.MessageId=pInput.MessageId

    //forward this to the message processor
    Set tsc=..SendRequestSync("EMQS.MessageProcessor",inbound,.response)
    Set pOutout=response
    Quit tsc
}

}

メッセージ・クラス EMQS.InboundMsg は以下のとおりです。

Class EMQS.InboundMsg Extends Ens.Request
{

Property Body As %String (MAXLEN="");

Property MessageId As %String(MAXLEN = 128);

}

ビジネス・サービスの追加と構成

ビジネス・サービスを Ensemble プロダクションに追加するには、管理ポータルを使用して以下の操作を行います。

  1. Ensemble プロダクションにビジネス・サービス・クラスのインスタンスを追加します。

  2. ビジネス・サービスを有効化します。

  3. IBM WebSphere MQ キューにアクセスしてメッセージを取得するアダプタを構成します。具体的には、以下を行います。

    これらのトピックについては、“IBM WebSphere MQ アダプタに関する設定” の節で説明します。

  4. プロダクションを実行します。

FeedbackOpens in a new tab