MFT ロガーのエラー処理とリジェクト

Managed File Transfer ロガーは、メッセージごとのエラーと一般的なエラーの 2 つのタイプのエラーを識別します。

エラーは、1 つまたは少数の個々のメッセージの問題によって発生する可能性があります。 メッセージごとのエラーとして識別される状況の例として次のものがあります。
  • データの必須項目である結果コードがメッセージから欠落している。
  • 転送で長さ 3000 文字のジョブ名が指定されたが、関連付けられているデータベース列に大きすぎて入らない
  • 転送で進行中メッセージを受信したが、開始された転送のレコードがない (恐らく転送開始メッセージが誤った経路でルーティングされたか遅延しているため)
  • 受信したメッセージは Managed File Transfer ログ・メッセージではありません。

一般エラーは、メッセージごとのエラー以外のこれらすべてのエラーです。 これらのエラーは、構成上の問題やプログラム・エラーが原因で発生する可能性があります。

ロガーは、メッセージごとのエラーを検出すると、リジェクト・キューにメッセージを置くことによりメッセージをリジェクトします。 出力ログには何も書き込まれないため、定期的にリジェクト・キューを検査するか、継続的にモニターしてリジェクトされたメッセージを検出してください。

データベースにメッセージが正常に書き込まれずに、あまりに多くのメッセージが連続してリジェクトされる場合は、一般エラーとして扱われます。 例えば、ジョブ名として常に 10 文字コードを使用するが、間違えてジョブ名の列を 2 文字幅に再構成してしまったサイトを考えてみましょう。 幅が大きすぎるデータは通常メッセージごとのエラーとなりますが、この場合、構成上の問題は一般的であるため、一般エラーとして検出されます。 wmqfte.max.consecutive.reject プロパティーを使用して、一般エラーを発生させるために必要なメッセージごとの連続エラー数を調整できます。

一般エラーが検出されると、ロガーはまだキュー・マネージャーにコミットされていないすべてのメッセージをロールバックし、定期的に再試行します。 ロガーが -F パラメーターを指定してフォアグラウンド・モードで開始された場合、問題を示すメッセージが出力ログおよびコンソールに書き込まれます。

ロガーの出力ログの場所は、そのロガーがスタンドアロンか JEE データベース・ロガーかによって異なります。 スタンドアロン・データベース・ロガーの場合は、 MQ_DATA_PATH/mqft/logs/coordination_qmgr_name/loggers/logger_nameディレクトリー内にあります。 JEE データベース・ロガーの場合は、そのアプリケーション・サーバーの標準出力ログに含まれます。

リジェクト・キュー

メッセージごとのエラーの原因となったメッセージはリジェクト・キューに移動されます。 リジェクトされたそれぞれのメッセージでは、メッセージがリジェクトされた理由を示すためにメッセージ・プロパティーが設定されています。 プロパティーのフルネームは usr.WMQFTE_ReasonForRejectionですが、usr です。 は、一部のコンテキスト (JMS および IBM® MQ Explorerを含む) では省略されます。

IBM MQ Explorer を使用している場合、キューを右クリックし、 「メッセージの参照 」をクリックすることで、拒否キューの内容を見ることができます。 メッセージがリジェクトされた理由を表示するには、メッセージをダブルクリックしてプロパティー・ダイアログを開き、「指定したプロパティー (Named Properties)」ページを選択します。 WMQFTE_ReasonForRejectionというプロパティーが表示されます。 別の方法として、この情報を自動的に取得するようにモニタリング・ツールを作成または構成することもできます。

場合によって、リジェクト・キューのメッセージを再処理する場合があります。 このトピックで前述したデータベース内の 2 文字のジョブ名列の例では、データベース列の幅を大きくすれば、メッセージを正常に処理できます。 別の例として、transfer-complete メッセージが、関連付けられている transfer-start メッセージが欠落しているためにリジェクトされた場合、transfer-start メッセージが後で着信する場合があります。 transfer-complete を再処理すると、成功します。

メッセージを再処理するには、メッセージをリジェクト・キューから入力キューに移動します。 通常インストールで、ロガーが独自の管理対象サブスクリプションを作成した場合、入力キューはキュー・マネージャーによって定義され、名前が SYSTEM.MANAGED.DURABLE.49998CFF20006204 のようになります。 入力キューを識別するには、サブスクリプション SYSTEM.FTE.DATABASELogger.AUTO のプロパティーで「宛先名 (Destination name)」を確認するか、次の MQSC コマンドを使用します。
 DISPLAY SUB(SYSTEM.FTE.DATABASELogger.AUTO) DEST
キュー間でメッセージを移動させる一つの方法は、例えば MA01 SupportPacを使うことである:
 q -IFTE.REJECT -oSYSTEM.MANAGED.DURABLE.49998CFF20006204 
リジェクト・キューには、さまざまな理由でリジェクトされたメッセージが含まれている場合があり、解決されているのは一部のみです。 この場合はまだすべてのメッセージを再処理でき、現在、受け入れ可能なメッセージはコンシュームされます。受け入れ不可能なメッセージは再度リジェクト・キューに移動されます。

転送ログ内の Malformed ログ・メッセージは、ロガーによって記録されません。 これらのメッセージは重要であるとみなされないため、リジェクト・キューに送られます。 転送ログ・メッセージについて詳しくは、 ファイル転送ログ・メッセージ・フォーマットを参照してください。