IBM WebSphere MQ 受信アダプタの使用法
ここでは、InterSystems IRIS® 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 のインスタンスとして) 関連するビジネス・サービスに送信します。ユーザが作成および構成するビジネス・サービスでは、このメッセージを使用してプロダクションの他の部分と通信します。以下の図は、全体的なフローを示しています。
さらに具体的に説明します。
-
アダプタが初期化されると、指定されたチャネルを使用して、指定されたキュー・マネージャおよびキューに接続されます。
-
アダプタは定期的に OnTask() メソッドを実行します。このメソッドは、(メッセージが利用可能な場合に) キューからメッセージを取得します。ポーリング間隔は CallInterval 設定によって決定されます。
-
アダプタがメッセージを取得すると、以下を実行します。
-
アダプタは EnsLib.MQSeries.MessageOpens in a new tab クラスのインスタンスを作成し、メッセージ・データをインスタンスに入れます。
-
アダプタは、関連するビジネス・サービス・クラスの内部 ProcessInput メソッドを呼び出し、EnsLib.MQSeries.MessageOpens in a new tab インスタンスを入力として渡します。
-
-
ビジネス・サービス・クラスの内部 ProcessInput() メソッドが実行されます。このメソッドは、すべてのビジネス・サービスが必要とする内部情報の保持など、基本的なプロダクション・タスクを実行します。ビジネス・サービス・クラスが継承するこのメソッドは、カスタマイズや上書きを行いません。
-
ProcessInput() メソッドがカスタムの OnProcessInput() メソッドを呼び出し、EnsLib.MQSeries.MessageOpens in a new tab インスタンスを入力として渡します。このメソッドの要件については、この後の “OnProcessInput メソッドの実装” で説明します。
応答メッセージは、同じパスを逆向きにたどります。
受信アダプタを使用するビジネス・サービスの作成
このアダプタをプロダクションで使用するには、ここに記載されているように新しいビジネス・サービス・クラスを作成します。後で、それをプロダクションに追加して、構成します。存在しなければ、適切なメッセージ・クラスを作成する必要もあります。"プロダクションの開発" の “メッセージの定義” を参照してください。
ビジネス・サービス・クラスの基本要件を以下に列挙します。
-
ビジネス・サービス・クラスは Ens.BusinessServiceOpens in a new tab を拡張するものでなければなりません。
-
クラスの ADAPTER パラメータは EnsLib.MQSeries.InboundAdapterOpens in a new tab である必要があります。
-
このクラスは OnProcessInput() メソッドを実装します。これについては “OnProcessInput メソッドの実装” で説明します。
-
その他のオプションと一般情報は、"プロダクションの開発" の “ビジネス・サービス・クラスの定義” を参照してください。
以下の例は、必要となる一般的な構造を示しています。
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
}
}
OnProcessInput() メソッドの実装
カスタム・ビジネス・サービス・クラスにおいて、OnProcessInput() メソッドは以下のシグニチャを持つ必要があります。
Method OnProcessInput(pInput As EnsLib.MQSeries.Message,
pOutput As %RegisteredObject) As %Status
ここで、pInput は、アダプタがこのビジネス・サービスに送信するメッセージ・オブジェクトです。これは EnsLib.MQSeries.MessageOpens in a new tab のインスタンスです。また、pOutput は、メソッド・シグニチャに必要な汎用出力引数です。
OnProcessInput() メソッドは、以下の一部またはすべてを実行する必要があります。
-
MQ メッセージ (EnsLib.MQSeries.MessageOpens in a new tab) を調べて、それをどのように使用するかを決定します。後述の “受信メッセージの使用法” を参照してください。
-
ビジネス・サービスから送信されることになる要求メッセージのインスタンスを作成します。
メッセージ・クラスの作成方法は、"プロダクションの開発" の “メッセージの定義” を参照してください。
-
要求メッセージに対し、MQ メッセージの値を使用して適切にプロパティを設定します。
-
ビジネス・サービスの適切なメソッドを呼び出して、要求をプロダクション内の宛先に送信します。具体的には、SendRequestSync()、SendRequestAsync()、または (あまり一般的ではない) SendDeferredResponse() を呼び出します。詳細は、"プロダクションの開発" の “要求メッセージの送信” を参照してください。
これらの各メソッドは、ステータス (具体的には、%StatusOpens in a new tab のインスタンス) を返します。
-
必ず出力引数 (pOutput) を設定します。通常、受信した応答メッセージと同じように設定します。この手順は必須です。
-
適切なステータスを返します。この手順は必須です。
このトピックの最後の "例" を参照してください。
受信メッセージの使用法
アダプタは、EnsLib.MQSeries.MessageOpens in a new tab のインスタンスをビジネス・サービスに送信します。このオブジェクトには、キューから取得したメッセージが含まれます。以下の 3 つのプロパティがあります。
-
Body — メッセージの本文
-
MessageID — メッセージ ID
-
BodySize — メッセージの長さを示す整数
例
以下のビジネス・サービスは、メッセージを取得し、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 production 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);
}
ビジネス・サービスの追加と構成
ビジネス・サービスをプロダクションに追加するには、管理ポータルを使用して以下の操作を行います。
-
ビジネス・サービス・クラスのインスタンスをプロダクションに追加します。
-
ビジネス・サービスを有効化します。
-
IBM WebSphere MQ キューにアクセスしてメッセージを取得するアダプタを構成します。具体的には、以下を行います。
-
アクセスするキュー・マネージャ、チャネル、およびキューを指定します。チャネルの指定形式には、使用するチャネルの名前、チャネルが使用するトランスポート、IBM WebSphere MQ サーバを実行するサーバ名 (または IP アドレス)、およびポートが含まれます。
これらのトピックについては、“IBM WebSphere MQ アダプタに関する設定” の節で説明します。
-
-
プロダクションを実行します。