- ワークベンチにあるメッセージ・フローをチェックします。
MQInput ノードの failure ターミナルを out ターミナルではなく、
連続するノードに接続した可能性があります。out ターミナルは、3 つのターミナルのうちの真ん中の
ターミナルです。未接続の out ターミナルに送信されたメッセージは廃棄されます。
- MQInput ノードの out ターミナルが後続のノードに正常に接続されている場合は、
ブローカーのローカル・エラー・ログを調べて、
問題が生じたためにメッセージ処理が終了したことを示すメッセージを探してください。
追加メッセージは詳細情報を記述しています。
MQInput ノードの failure ターミナルが、
例えば MQOutput ノードと接続している場合には、
これらのメッセージは現れません。
あるノードと他のノードの failure ターミナルとの接続は、すべてのエラー処理を扱えるようにメッセージ・フローを設計したことを示します。
failure ターミナルと MQOutput ノードを接続した場合、メッセージ・フローは発生するエラーを無視します。
- MQInput ノードの out ターミナルが後続のノードに正常に接続されており、
ローカル・エラー・ログにエラー・メッセージが何も含まれていない場合は、
メッセージ・フローのユーザー・トレースをオンにしてください。
- 「ブローカー管理」パースペクティブに切り替えます。
- Domain ビューで、メッセージ・フローを選択して右マウス・ボタン・クリックします。
(「最新表示」アイコンをクリックして表示を最新表示しなければならない場合があります。)
- をクリックします。
このアクションは、メッセージが送信されるノードからのみ、
ユーザー・トレース・エントリーを生成します。
分散システムでは、mqsireadlog コマンドを使用して
トレース・エントリーを検索したり、mqsiformatlog コマンドを使用してそれらをフォーマットしたりすることができます。
また、フォーマットされたレコードを表示して、メッセージ・フローによってメッセージのパスをチェックすることができます。
z/OS の場合、
COMPONENTPDS にある BIPJLOG ジョブを編集してから実行依頼し、mqsireadlog および mqsiformatlog コマンドを実行して、
トレースを処理してください。
- ユーザー・トレースに、メッセージは、予期していたメッセージ・フローを介して
パスを入手していないことが表示された場合、メッセージ・フローを選択して右クリックし、を
選択することによって、ユーザー・トレースのレベルを「デバッグ」に上げます。
メッセージをメッセージ・フローに再度送信してください。
デバッグ・レベルのトレースによって、メッセージがその経路を取る理由についてさらに詳細な情報を入手できます。また、これによって、メッセージ・フローが実行するアクションの理由を判別することができます。
問題を解決した後、トレースを必ずオフにしてください。
そうしないと、パフォーマンスに悪影響が出ます。
- MQOutput ノードで定義された出力キューに対する mqput コマンドが正常に行われなかった場合 (例えば、キューがフルであったりプットが使用不可である場合)、メッセージの最終宛先は以下に応じて変わります。
- MQOutput ノードの failure ターミナルが接続されているかどうか
- メッセージがトランザクションとして処理されているかどうか (これは、
MQInput ノード、MQOutput ノード、および入出力キューのトランザクション・モードの設定に
依存します)
- メッセージが持続的または非持続的かどうか (transaction mode=automatic の場合のみ)。
transaction mode=yes の場合は、すべてのメッセージが持続的なものとして扱われ、
transaction mode=no の場合には非持続的なものとして扱われます。
一般に:
- 障害に対してパスが定義されていない (つまり、MQInput ノードの catch ターミナルまたは failure ターミナルのどちらも接続されていない) 場合、
- 非トランザクションのメッセージは廃棄されます。
- トランザクションのメッセージは再試行のため入力キューにロールバックされます。
- メッセージのバックアウト・カウントが入力キューのバックアウトのしきい値 (BOTHRESH) よりも小さい場合、そのメッセージは再試行され、out ターミナルに再送されます。
- バックアウト・カウントがバックアウトのしきい値と等しいか、またはそれより大きい場合、
指定されている場合、そのメッセージはバックアウト・キュー (入力キューの BOQNAME 属性によって識別される) に置かれます。
または、バックアウト・キューが定義されていない場合、またはバックアウト・キューへの MQPUT が失敗した場合、送達不能キューに置かれます。
送達不能キューへの MQPUT が失敗した場合、または送達不能キューが定義されていない場合、メッセージ・フローは連続してループし、送達不能キューへのメッセージの書き込みを試行します。
- 障害に対してパスが定義されている場合 (catch ターミナルおよび failure ターミナルが接続されている場合、メッセージは catch ターミナルを介して伝搬されます)、そのパスはメッセージの宛先を定義します。
- ご使用のメッセージ・フローが MQInput ノードのプロパティーで transaction mode=yes を使用する場合、またメッセージが出力キューに現れない場合、メッセージ・フローのパスをチェックしてください。
メッセージ・フローが、障害ではないものの出力キュー (または他の持続的なストア) で終わらないパスを持っている場合、メッセージ・フローは失敗しておらず、メッセージはバックアウトされません。また、代わりの宛先 (例えば、catch ターミナル、送達不能キュー、またはキューのバックアウト・キュー) にも書き込まれません。
すべての可能なパスが最終の出力ノードに達してデッド・エンドに達していないことを確認します。
例えば、以下をチェックします。
- Filter ノードの不明なターミナルとメッセージ・フローの別のノードを接続しています。
- Filter ノードの true および false ターミナルとメッセージ・フローの別のノードを接続しています。