IBM MQ SOAP リスナー

IBM® MQ SOAP リスナーは、URI で宛先として指定されたキューから着信 SOAP 要求を読み取ります。 このリスナーは、要求メッセージの形式を検査してから、Web サービス・インフラストラクチャーを使用して Web サービスを呼び出します。 IBM MQ SOAP リスナーは、URI の応答宛先キューを使用して、Web サービスから応答またはエラーを返します。 IBM MQ レポートを応答キューに返します。

ここでリスナーという用語は、標準的な Web サービスの意味で使用されます。 これは、 runmqlsr コマンドによって呼び出される標準 IBM MQ リスナーとは異なります。

説明

Java SOAP リスナーは、Java クラスとして実装され、Axis 1.4 を使用してサービスを実行します。 .NET リスナーはコンソール・アプリケーションであり、 .NET Framework 1 または .NET Framework 2 のサービスを実行します。 .NET Framework 3 サービスの場合、 Microsoft Windows Communication Foundation (WCF) 用の IBM MQ カスタム・チャネルを使用します。

デプロイメント・ユーティリティーは、 Java または .NET SOAP リスナーを自動的に開始するスクリプトを作成します。 SOAP リスナーは、amqSOAPNETListener コマンドを使用するか、またはSimpleJavaListener クラスを呼び出すことにより、手動で開始できます。 デプロイメント・ユーティリティーで -s オプションを設定することにより、 IBM MQ SOAP リスナーを IBM MQ サービスとして開始するように構成できます。 別の方法として、トリガーを使用してリスナーを開始するか、デプロイメント・ユーティリティーによって生成されるリスナー開始および終了スクリプトを使用します。 トリガーは手動で構成できます。あるいは、-tmq および -tmp デプロイメント・オプションを使用して自動的に構成することもできます。 要求キューを GET (DISABLED) に設定すれば、リスナーを終了できます。
表 1. デプロイメント・ユーティリティーによって生成されるコマンド・スクリプト
Web サービス・インフラストラクチャー UNIX および Linux® システム Windows Java Windows.NET
リスナーの開始 startWMQJListener.sh startWMQJListener.cmd startWMQNListener.cmd
リスナーの停止 endWMQJListener.sh endWMQJListener.cmd endWMQNListener.cmd
リスナー・サービスの定義 defineWMQJListener.sh defineWMQJListener.cmd defineWMQNListener.cmd

IBM MQ SOAP リスナーは、 endpointURL および soapAction フィールドを SOAP メッセージから SOAP インフラストラクチャーに渡します。 リスナーは Web サービス・インフラストラクチャーを介してサービスを呼び出し、応答を待ちます。 リスナーは、endpointURL および soapAction を検証しません。 フィールドは、SOAP クライアントによって設定された URI で提供されるデータから、 IBM MQ SOAP 送信側によって設定されます。

リスナーは、応答メッセージを作成して、要求メッセージ URI で提供された応答の宛先に送信します。 またリスナーは、要求メッセージのレポート・オプションに従って、相関 ID を応答メッセージに設定します。 リスナーは要求メッセージから有効期限、持続性、および優先順位の設定を返します。 また、リスナーはいくつかの環境でのレポート・メッセージをクライアントに返送します。

SOAP 要求に形式エラーがある場合、リスナーは応答宛先キューを使用してクライアントにレポート・メッセージを返します。 また、キュー・マネージャーは、レポートが要求されている場合に、応答宛先キューを使用してレポート・メッセージをクライアントに返します。 イベントの数に応じて、詳細なレポート・メッセージが応答キューに書き込まれます。

  • 例外。
  • メッセージ有効期限。
  • 認識されない要求メッセージの形式。
  • MQRFH2 ヘッダーの保全性検査の失敗。
  • メイン・メッセージの本文の形式が MQFMT_NONE でない。
  • IBM MQ SOAP リスナーが要求を処理している間に、バックアウト/再試行のしきい値を超過しました。

IBM MQ SOAP 送信側は、 MQRO_EXCEPTION_WITH_FULL_DATA および MQRO_EXPIRATION_WITH_FULL_DATA レポート・オプションを設定します。 IBM MQ SOAP 送信側によって設定されたレポート・オプションの結果として、レポート・メッセージには発信元の要求メッセージ全体が含まれます。 IBM MQ SOAP 送信側は MQRO_DISCARD オプションも設定します。これにより、レポート・メッセージが返された後にメッセージが破棄されます。 レポート・オプションが要件を満たしていない場合、独自の送信側を作成して別の MQRO_EXCEPTION および MQRO_DISCARD レポート・オプションを使用してください。 MQRO_DISCARD を設定していない別の送信側によって SOAP 要求が送信される場合は、失敗したメッセージは送達不能キュー (DLQ) に書き込まれます。

リスナーがレポート・メッセージを生成して、レポートの送信処理中に失敗した場合は、そのレポート・メッセージは DLQ に送信されます。 DLQ ハンドラーがこれらのメッセージを正しく処理するようにしてください。

送達不能キューに書き込もうとしたときにエラーが発生すると、メッセージが IBM MQ エラー・ログに書き込まれます。 リスナーがさらにメッセージの処理を続行するかどうかは、メッセージの持続性およびトランザクション・オプションが選択されているかどうかにより異なります。 リスナーが 1 フェーズ・トランザクション・モードを実行し、非持続要求メッセージを処理している場合、元のメッセージは廃棄されます。 IBM MQ SOAP リスナーは実行を続行します。 要求メッセージが持続メッセージである場合、その要求メッセージは要求キューにバックアウトされ、リスナーは終了します。 要求キューは get-inhibited に設定され、偶発的にトリガーが再始動されないようにします。

Syntax diagram

.NET
Read syntax diagramSkip visual syntax diagram amqwSOAPNETListener URI (.NET service)URI ( Java service)-? -aDefaultMsgIntegrity-xonePhasetwophaseHighMsgIntegrity-xonePhasetwophaseLowMsgIntegrity-xonePhasetwophasenone-d-1msecs-ipassContextownContext-n10numThreads-v-wc:\inetpub\wwwroot\-xonePhasetwophasenone-aLowMsgIntegrity
Java
Read syntax diagramSkip visual syntax diagram java com.ibm.mq.soap.transport.jms.SimpleJavaListener URI (.NET service)URI ( Java service)-? -aDefaultMsgIntegrity-xonePhasetwophaseHighMsgIntegrity-xonePhasetwophaseLowMsgIntegrity-xonePhasetwophasenone-d-1msecs-ipassContextownContext-n10numThreads-v-xonePhasetwophasenone-aLowMsgIntegrity

必要なパラメーター

URI プラットフォーム
Web サービス・デプロイメントの URI 構文とパラメーターを参照してください。
-?
コマンドの使用法について説明しているヘルプ・テキストを印刷します。

オプション・パラメーター

-a integrityOption
integrityOption は、失敗した要求メッセージを送達不能キューに書き込むことができない場合の IBM MQ SOAP リスナーの動作を指定します。 integrityOption には、以下のいずれかの値を使用できます。 values:
DefaultMsgIntegrity
非持続メッセージの場合、リスナーは警告メッセージを表示し、元のメッセージが破棄された状態で実行を継続します。 持続メッセージの場合、リスナーはエラー・メッセージを表示し、要求メッセージをバックアウトして要求キューに残し、終了します。 DefaultMsgIntegrityは、-aオプションが省略された場合、またはintegrityOptionが指定されなかった場合に適用される。
LowMsgIntegrity
持続メッセージと非持続メッセージのどちらの場合も、リスナーは警告を表示して実行を継続し、メッセージを破棄します。
HighMsgIntegrity
持続メッセージと非持続メッセージのどちらの場合も、リスナーはエラー・メッセージを表示し、要求メッセージをバックアウトして要求キューに残し、終了します。
デプロイメント・ユーティリティーは、-x フラグと -a フラグの互換性を検査します。 -x none が指定されている場合、-a LowMsgIntegrity が指定されている必要があります。 これらのフラグに互換性がない場合、デプロイメント・ユーティリティーはエラー・メッセージを表示し、デプロイメントの手順を何も行わずに終了します。
-d ミリ秒
msecs は、いずれかのスレッドで要求メッセージが受信された場合に、 IBM MQ SOAP リスナーが活動状態を維持するミリ秒数を指定します。 msecs-1 に設定されている場合、リスナーは無限に活動します。
-i コンテキスト
Context は、リスナーが識別コンテキストを渡すかどうかを指定します。 Context は以下の値をとります。
passContext
元の要求メッセージの識別コンテキストを応答メッセージに設定します。 SOAP リスナーは、要求キューからのコンテキストの保存、およびそれを応答キューに渡すための権限があるかどうかを確認します。 確認は、コンテキストを保存する要求キューと、コンテキストを渡す応答キューのオープンの実行時に行います。 必要な権限がない場合や、MQOPEN 呼び出しが失敗する場合は、応答メッセージは処理されません。 応答メッセージは送達不能キューに書き込まれ、送達不能ヘッダーには失敗した MQOPEN からの戻りコードが入ります。 リスナーは、後続の着信メッセージの処理を通常どおり続行します。
ownContext
SOAP リスナーは、コンテキストを渡しません。 返されるコンテキストは、元の要求メッセージを作成したユーザー ID ではなく、リスナーが実行されているユーザー ID を反映します。
元のコンテキストのフィールドは、SOAP リスナーではなく、キュー・マネージャーによって設定されます。
-n numThreads
numThreads は、 IBM MQ SOAP リスナー用に生成された始動スクリプト内のスレッドの数を指定します。 デフォルトは 10 です。 メッセージ・スループットが高い場合には、この数値を引き上げることを検討してください。
-v
-v は、外部コマンドからの詳細出力を設定します。 エラー・メッセージが必ず表示されます。 -v を使用すると、カスタマイズされたデプロイメント・スクリプトを作成するために調整可能なコマンドが出力されます。
-w serviceDirectory
serviceDirectory は、Web サービスが入っているディレクトリーです。
-x トランザクション性
transactionality は、リスナーのトランザクション制御のタイプを指定します。 transactionality は、以下の値のいずれか 1 つに設定できます。
onePhase
IBM MQ 1 フェーズ・サポートが使用されます。 処理中にシステム障害が起こった場合、要求メッセージはアプリケーションに再送達されます。 IBM MQ トランザクションは、応答メッセージが 1 回だけ書き込まれるようにします。
twoPhase
2 フェーズ・サポートが使用されます。 サービスが適切に作成されていれば、コミットされるサービスの 1 回の実行の間に、メッセージは厳密に 1 回送信され、他のリソースと整合します。 このオプションはサーバー・バインディング接続にのみ適用されます。
none
トランザクションをサポートしません。 処理中にシステム障害が起きると、要求メッセージは永続メッセージであるとしても失われる可能性があります。 サービスは完了していた場合もあれば、完了していない場合もあり、応答、レポート、送達不能メッセージは、書き込み済みの場合もあれば、書き込み済みでない場合もあります。
デプロイメント・ユーティリティーは、-x フラグと -a フラグの互換性を検査します。 詳しくは、-a フラグの説明を参照してください。

.NET

amqwSOAPNETlistener
-u "jms:/queue?destination=myQ&connectionFactory=()
&targetService=myService&initialContextFactory=com.ibm.mq.jms.Nojndi"
-w C:/wmqsoap/demos
-n 20

Java

java com.ibm.mq.soap.transport.jms.SimpleJavaListener
-u "jms:/queue?destination=myQ&connectionFactory=()
&initialContextFactory=com.ibm.mq.jms.Nojndi"
-n 20