0

Reactor の追加パッケージの機能に基づいて、Kotlin と Reactor に再試行ロジックを実装しようとしていました。私がやろうとしているのは、期間のリストを渡すことであり、それぞれにリストcontext.iterationの (反復-1) 番目の要素を取得しています。それは部分的に機能します。リストのサイズである再試行の最大数を指定しましたが、常にIndexOutOfBoundsException最後の反復で取得しています。これは、私が望んでいた以上のものです。ただし、再試行は実行されていますが、指定された期間と「正しい」回数で(おそらくIndexOutOfBoundsExceptionそれ以上を防ぐため)、この例外(および根本的な原因)だけが気になります。

これは私のカスタム BackOff インターフェイスです。

interface MyCustomBackoff : Backoff {
    companion object {
        fun getBackoffDelay(backoffList: List<Duration>): (IterationContext<*>) -> BackoffDelay {
            return { context -> BackoffDelay(backoffList[(context.iteration() - 1).toInt()]) }
        }
    }
}

そして、私のKotlin拡張機能は次のとおりです。

fun <T> Mono<T>.retryCustomBackoffs(backoffList: List<Duration>, doOnRetry: ((RetryContext<T>) -> Unit)? = null): Mono<T> {
    val retry = Retry.any<T>().retryMax(backoffList.size.toLong()).backoff(MyCustomBackoff.getBackoffDelay(backoffList))

    return if (doOnRetry == null) {
        this.retryWhen(retry)
    }
    else {
        this.retryWhen(retry.doOnRetry(doOnRetry))
    }
}

ここで何が欠けていますか?

4

1 に答える 1