私はしばらくhornetqを使用していますが、最近まで問題ありませんでした。私はこのような問題を抱えています:キューに「スタック」しているメッセージがいくつかあります(クライアント確認モードで作業しているため、一部のコンシューマーがメッセージを保持していて確認応答を送信していないことが問題である可能性があります) 。JConsoleを使用してキューを確認していますが、メッセージカウンターが上昇していることがわかりますが、「listMessagesAsJson」を実行しようとすると、参照用に空の結果が得られ、それらを後でデッドキューに送信しようとしました(トランザクションモードとRuntimeExceptionsのスロー)意図的に)そしてDLQでは、messageCounterと "listMessagesAsJson"の両方が実際にDLQで機能することを確認できます(メッセージリストを取得しています)。ただし、DLQと通常のキューの違いを理解することはできません。誰かがここで私を助けることができますか?前もって感謝します
2 に答える
listDeliveringMessagesと呼ばれる別のメソッドを追加しました。これにより、処理中のメッセージが表示され、何が起こっているのかがわかります。
これはhttps://issues.jboss.org/browse/HORNETQ-763の一部として行われました
現在、修正を含まない2.2.14(hornetqのフォーラムでの議論による)を使用しています。
詳細については、次のgithubコミットを参照してください:https ://github.com/hornetq/hornetq/commit/3812ee77100c473489f72f36e5078a56d37e5c19
クライアントがメッセージを確認していないことについて、あなたは正しいと思います。コンシューマーに配信されたがまだ確認されていない(またはTXがコミットされていない)キュー内のメッセージは、この灰色の状態で存在し、クライアントがロールバックしてメッセージを再配信する必要がある場合に備えて保持する必要がありますが、同時にメッセージは'1人の消費者にしか配信できないため、他の人は基本的に利用できません。キューにn個のメッセージがあるが、アクティブなコンシューマーがない場合、listMessagesAsJson操作は問題なくそれらをリストします。
DLQが機能するのは、ランタイム例外がターミナルであり、ブローカーはメッセージがコンシューマーによって拒否されたことを認識しているため、「グレー」ゾーンにないためです。