手動でジョブを再キューイングせずに、ジョブが(RejectまたはNakを介して)再キューイングされた回数をカウントする方法はありますか? 'n'時間ジョブを再試行し、 'n'時間後にドロップする必要があります。
ps:現在、ジョブを手動で再キューイングしています(古いジョブを削除し、正確なコンテンツと追加のCounterヘッダーを使用して新しいジョブを作成します(カウンターがない場合、または値が 'n'未満の場合))
メッセージが1回以上再配信されたときにtrueに設定されるredelivered
メッセージプロパティがあります。
再配信数または左再配信数(別名ホップ制限またはIPスタックのttl)を追跡する場合は、その値をメッセージ本文またはヘッダーに格納する必要があります(文字通り-メッセージを消費し、変更してから、変更してブローカーに公開します)。
あなたを助けるかもしれない答えのある同様の質問もあります: RabbitMQで再試行の回数を設定するにはどうすればよいですか?
メッセージが実際にデッドレターであった場合は、x-death
メッセージヘッダーの内容を確認できます。
これは、たとえば、reject
/nack
とrequeue = false
があり、キューにデッドレター交換が関連付けられている場合に当てはまります。
その場合、このヘッダーの内容は配列です。各要素は、失敗した配信試行を記述し、配信が試行された時刻、ルーティング情報などの情報を含みます。
これはRabbitMQで機能します-一般的にAMQPに適用できるかどうかはわかりません。
[〜#〜]編集[〜#〜]
私が最初にこの回答を書いたので、x-death
ヘッダー構造が変更されました。
ヘッダーの形式が変わるのは一般的に非常に悪いことですが、この特定のケースでは、メッセージが継続的にデッドレターされた場合、メッセージサイズが無期限に大きくなるためです。
したがって、メッセージの死亡数を取得するためにここにあったコードを削除しました。
新しいヘッダー形式から死亡数を取得することは引き続き可能です。