Я пытаюсь реализовать неопределенный экспоненциальный откат для службы.Политика повторных попыток и т. Д. Все работает должным образом, но нам нужна некоторая видимость счетчика повторов, и я хотел бы, чтобы это регистрировалось внутри самого блока выполнения (я настроил прослушиватель, который извлекает счетчик повторов и правильно его регистрирует,но он не включает наши идентификаторы span / trace и не имеет доступа к URI, к которому мы не можем записать и т. д.
Вот код:
Пользовательский шаблон повторов:
@StreamRetryTemplate
fun streamRetryTemplate(): RetryTemplate {
val backOffPolicy = ExponentialRandomBackOffPolicy().apply {
initialInterval = config.initialInterval
multiplier = config.multiplier
maxInterval = config.maxInterval
}
return RetryTemplate().apply {
setRetryPolicy(AlwaysRetryPolicy())
setBackOffPolicy(backOffPolicy)
setListeners(retryListeners())
}
}
... и вот слушатель, который DOES правильно регистрирует счет повторов:
@Bean
fun retryListeners(): Array<RetryListener> {
return arrayOf(object : RetryListenerSupport() {
override fun <T, E : Throwable> onError(
context: RetryContext?, callback: RetryCallback<T, E>?, throwable: Throwable?
) {
logger.info { "FROM LISTENER: ${context?.retryCount}" }
}
})
}
... и вот функция, которая на самом делевыполняет логику повторных попыток, но NOT когда-либо имеет счет повторных попыток, который больше 0, несмотря на то, что слушатель, распознающий число повторных попыток, больше 0 и ведущий журнал правильно:
private fun attachRequestWithRetries(method: HttpMethod, uri: String, record: Record) =
streamRetryTemplate.execute(RetryCallback<Mono<ClientResponse>, Exception> { context ->
if (context.retryCount > 0) logger.warn { "Retrying $method $uri. Retry: ${context.retryCount}" }
attachRequest(method, uri, record)
})
Любойидеи, почему он не увеличивается правильно?