私は、それが可能であるかどうか、現在私が認識していない要件を持っています。メッセージに特定のプロパティが含まれている場合、JMS メッセージのエラーを一時的に無効にしたいと考えています。現在、HornetQ をメッセージ プロバイダーとして使用しています。
例を挙げてみましょう:
キューには、次の 3 つのエントリが含まれます。
{1, "foo", "A_CATEGORY"}
{2, "bar", "B_CATEGORY"}
{9, "bof", "A_CATEGORY"}
特定の時点で、アプリは HornetQ メッセージ サーバーに、B_CATEGORY に属するメッセージを現時点で配信してはならないことを伝えることができる必要があります (たとえば、B_CATEGORY オブジェクトの基礎となるデータベースが更新されるため)。そのため、id 2 のメッセージは現時点では配信されませんが、1 と 9 はカテゴリ オブジェクトの値が異なるため配信されます。
アプリケーションをまったく再起動せずに、Java コードから実行する必要があります。これはまったく可能ですか?
ご協力いただきありがとうございます!
この問題に対する別の設計アプローチについて考えてみました。最初のキューにすべての種類のカテゴリのメッセージが含まれていると仮定しましょう (カテゴリごとにキューを作成することはできません。カテゴリがたくさんある可能性があるからです)。この「通常の」キューは、通常は構成されています (たとえば、有効期限はありませんが、DLQ があります)。
リスナーがそのようなメッセージを消費し、特定のカテゴリに属するメッセージを処理できないことがわかった場合、それを 2 番目のキューに入れます。このキューには、再配信の遅延と有効期限が設定されています。有効期限を十分に長く設定し (もちろん、キューがオーバーフローすることはありません)、再配信時間を短すぎないように設定すると、上記の質問に対する解決策がない場合でもうまくいくはずです。
もちろん、カテゴリを処理できない間にこれらのキュー エントリがいくつ作成されるかを計算する必要があります。また、カテゴリが利用できない場合に、それに応じて再配信を調整できるようになるまでの時間。