同じ ID の「シグナル」メッセージを毎分キューに送信するスケジューラがあります。同時に、メッセージ ハンドラーは、5% のケースで 5 秒から 15 分の時間範囲でメッセージを消費できます。
この場合、スケジューラから送信された 2 番目のメッセージが無視されるように、べき等メッセージ処理を実装するにはどうすればよいでしょうか?
メッセージの重複検出を採用しようとしましたが、メッセージの発生タイムスタンプのみを使用するため (正しい仮定ですか?)、キューに同じ ID のメッセージがある場合でも (おそらくロックされている可能性があります)、このアプローチはうまく機能しません。処理中) - 新しいメッセージは、重複検出時間ウィンドウが閉じられた後に発生します。
メッセージハンドラーがメッセージを処理した後にメッセージ自体を再スケジュールするように、間隔をスライドさせることも考えています。しかし、この解決策をそれほど簡単にできない問題が他にもいくつかあります。