Мы используем последнюю версию Polly для обработки наших политик повторных попыток и выключателей для взаимодействия с тремя API.
Основной поток:
А) Чтение данных из каталога продукции (API)
Б) Получить уникальный торговый маркер (API)
C) Обновить каталог продавца (с новым элементом) (API)
Из-за загруженности API Merchant Catalog (сторонней, пока не можем обойти это!) Мы иногда получаем отскок. Полли настроена на повторную попытку в случае сбоя и стиль шаблона автоматического выключателя, отключите его.
Мы поняли, что он был отключен последовательно, потому что наш Торговый токен был помечен как недействительный, даже если сервер выдал пустышку - третье лицо помечает токен, используемый даже при ошибке.
Чтение этой статьи , на которой мы изначально основали наше решение, мы думаем, используя контекст для перезагрузки / обновления токена аутентификации. Однако я немного сбит с толку, как у меня может быть политика, которая обновляет этот токен, когда эта логика находится не в подключении (запуске), а в обработчике, запускающем политику.
var authMerchTokenPolicy = Policy<HttpResponseMessage>
.HandleResult(r => r.StatusCode == 500)
.RetryAsync(1, onRetryAsync: async (ex, i, context) => await RefreshMerchantAuthorization(context["httpClient"]));
Указывает ли приведенный выше пример, что я реализую RefreshMerchantAuthorization в классе запуска?
Я не видел конкретного примера, в котором заключается путаница - и с тех пор ушел оригинальный разработчик, который написал это (по иронии судьбы по имени Поли!)