症状:
プロデューサによって送信されたメッセージをコンシューマが受信しない
考えられる原因:
考えられる原因: 制限の動作が、ブローカでのメッセージの削除を引き起こしている。
送信先メモリー内のメッセージ数またはメッセージのバイト数が設定済みの制限に達すると、ブローカはメモリーリソースを節約しようとします。これらの制限に達したときにブローカが選択する 3 つの設定可能な動作によって、メッセージが失われることがあります。
REMOVE_OLDEST: もっとも古いメッセージを削除する。
REMOVE_LOW_PRIORITY: 有効期間に従いもっとも優先度の低いメッセージを削除する。
REJECT_NEWEST: 新しい持続メッセージを拒否する。
この問題の原因を確認するには: 「デッドメッセージキューにメッセージが含まれる」の説明に従い、デッドメッセージキューを確認します。特に「メッセージ数かメッセージサイズが送信先の制限を超える」の指示に従ってください。REMOVE_OLDEST か REMOVE_LOW_PRIORITY の理由を探します。
問題を解決するには: 送信先の制限を上げます。たとえば、次のように指定します。
imqcmd update dst -n MyDest - o maxNumMsgs=1000
考えられる原因: メッセージタイムアウト値が期限切れになる。
ブローカは、タイムアウトして期限切れになったメッセージを削除します。送信先がメッセージで過分にバックログされている場合、生存期間の値が短すぎるメッセージは削除されます。
この問題の原因を確認するには: QBrowser デモアプリケーションを使用し、デッドメッセージキューの内容を調べ、メッセージがタイムアウトになっているかどうかを確認します。QBrowser デモのプラットフォームごとの場所については、付録 A 「プラットフォームごとの Message QueueTM データの場所」を参照し、アプリケーション例と場所の表を調べてください。
以下は、Windows プラットフォームにおける呼び出し例です。
cd \MessageQueue3\demo\applications\qbrowser java QBrowser
QBrowser のメインウィンドウが表示されたら、キュー名 mq.sys.dmq を選択してから「Browse」をクリックします。次のようなリストが表示されます。
メッセージをダブルクリックすると、そのメッセージの詳細が表示されます。
メッセージの JMS_SUN_DMQ_UNDELIVERED_REASON プロパティー値が EXPIRED に設定されているかどうか確認してください。
問題を解決するには: アプリケーション開発者と相談し、生存時間の値を上げます。
考えられる原因: クロックが同期化しない。
クロックが同期化されていない場合、ブローカによるメッセージの生存期間の計算が誤りとなり、メッセージが有効期限より早く削除される場合があります。
この問題の原因を確認するには: ブローカのログファイルで、B2102、B2103、B2104 のメッセージを探します。このメッセージはすべて、クロックスキューが検出されたことを報告します。
問題を解決するには: 「システムリソースの準備」の説明に従い、時刻同期プログラムが動作していることを確認します。
考えられる原因: コンシューミングクライアントが接続でのメッセージ配信の開始に失敗した。
クライアントコードが接続を確立し、その接続上でメッセージ配信を開始するまで、メッセージは配信できません。
この問題の原因を確認するには: クライアントコードが接続を確立しメッセージ配信を開始したことを確認します。
問題を解決するには: 接続を確立しメッセージ配信を開始するように、クライアントコードをプログラミングし直します。