JVM 用の Lettuce Redis クライアントを使用して、Redis リストに基づくキューを構築しています。メモリ内キューのように動作するのが理想的ですが、ネットワークの相互作用が関係しているため、これは不可能です。
レタスのドキュメントにはエラー処理に関するセクションがあり、私の場合、エラーが発生したときに失敗したコマンドを再試行したいと考えています。問題は、例外階層があまり細かく設定されておらず、次の問題に対処する方法がわからないことです。
- 失敗したコマンドを再試行できるかどうかを判断する方法は? コマンドが無期限に失敗し、再試行が無限ループにつながる理由はいくつかあります。現在の Redis バージョンは使用されているコマンド構文をサポートしていない、キーが既に存在し、互換性のないタイプであるなどです。
- 信頼できないネットワークの場合に、レタスに常に再接続するように頼ることはできますか?
RedisException
場合によっては、一部を再試行したりNativeIoException
、Redis クライアント インスタンスを再作成したり、アプリケーション全体を再起動したりするべきではない可能性はありますか? - 失敗したコマンドが実際に Redis によって実行されたものではなく、再試行しても重複やデータの損失が発生しないかどうかを知る方法はありますか (または、少なくともこれは、場合によっては例外クラスによって決定される可能性があります)。これは、1 回限りの配信の基本的な問題である可能性があります。私の知る限り、Redis はこれに対処する手段を提供していません (たとえば、Kafka とは異なります)。
この問題は誰もが対処しなければならないように見えますが、これに関する情報はあまりないようです。