Я реализовал RetryListener
, который отслеживает сбои в приложении SCSt с Kafka. Мне интересно, есть ли способ передать дополнительную информацию в RetryContext, а затем в повторную операцию.
Поток:
Операция не удалась
Вызывается RetryListener.onError (контекст RetryContext, обратный вызов RetryCallback, Throwable throwable). <--- Я хочу передать дополнительную информацию в контекст
Операция повторяется <--- Я хочу передать дополнительную информацию для повторной попытки (возможно, через обратный вызов?)
Я просматривал исходный код и знаю, что можно передать stateful
boolean
в RetryingMessageListenerAdapter
, но я не уверен, как передать это во фреймворк.
В потоке слушателя ...
RetrySynchronizationManager.getContext().setAttribute("foo", "bar");
/**
* Global variable support for retry clients. Normally it is not necessary for
* clients to be aware of the surrounding environment because a
* {@link RetryCallback} can always use the context it is passed by the
* enclosing {@link RetryOperations}. But occasionally it might be helpful to
* have lower level access to the ongoing {@link RetryContext} so we provide a
* global accessor here. The mutator methods ({@link #clear()} and
* {@link #register(RetryContext)} should not be used except internally by
* {@link RetryOperations} implementations.
*
* @author Dave Syer
*
*/
public final class RetrySynchronizationManager {
Зачем нужен stateful? Я думал, вы просто хотите передать некоторую дополнительную информацию от @StreamListener
к RetryListener
и, возможно, наоборот.
Я думаю, что увяз в семантике документа, и я не уверен, что stateful
- это то, что мне нужно. То, что мне нужно, - это возможность передать больше информации для повторной попытки, например ID, поэтому следующая повторная попытка может ссылаться на предыдущий ID.
OK; поэтому установите атрибут в RetryListener.open()
; получить доступ к нему в прослушивателе потока с помощью диспетчера синхронизации; добавьте туда дополнительные атрибуты, если хотите, чтобы вы могли получить к ним доступ в методе onError()
. И т.д ... и т.д ...
Возможно, я иду по неправильному пути, и логическое значение
stateful
мне не нужно. Есть ли способ передать информацию коду, выполняющему повторную попытку? Мне нужно поддерживать идентификатор при повторных попытках.