java awsクライアントを使用しているなど、いくつか不明な点がありますか?どのバージョン、これは実稼働環境かデバッグ/テスト専用です、killスイッチのマニュアルか自動的に起動します。
いくつかの前提に基づいて、ここでどのように求められるかを達成する方法があります。
あなたは以下の
@SqsListener(value = mySqsQueueNameHere", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
public void onMessage(String payloadStr, Acknowledgment acknowledgement) throws InterruptedException, ExecutionException, JsonParseException, JsonMappingException, IOException {
if(isKillSwitchOn) throw new SomeExceptionHere();
.....rest of code here if kill switch not on....
}
任意の例外がスローされたときSqsMessageDeletionPolicy.ON_SUCCESS
がキューに戻ってメッセージを置くような何かを行うことができ、最新のAWSクライアントと春のjavaアプリケーションにSQSリスナーを持っている場合。 SqsListenerは、キュー名と削除ポリシーのリストのみを受け入れます。リスナーをシャットダウンするためのきれいな方法はありません。
これにより、メッセージが消費されてから削除されますが、リスナーは引き続きメッセージはキューから取り除かれますが、すぐに戻されます。私はまた、SQSがそのメッセージが適切な場所に行を戻すことができるかどうかを確認するためにキューにどのような影響があるかもわかりません。
新しいFIFOキューを除いて、Sqsキューは本質的に順序付けられていません。これは高価で控えめなアプローチのように思えますが、スイッチが無効になるまでスラッシングするだけですが、動作するように思えますし、コードを組み込むために役立ちます。 –
@Dan Farrell私はこれが確かにどんな手段でも目立つ解決ではない –