Экспоненциальная отсрочка с использованием azure служебной шины в C# - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь реализовать экспоненциальную отсрочку с помощью служебной шины azure. В основном у меня есть блок catch, и если в настоящее время я делаю какую-либо ошибку, я прошу его повторить попытку через каждую 1 секунду, и я жду этого.

Цель: я хочу использовать экспоненциальную задержку. Итак, в основном после каждой попытки я хочу экспоненциально увеличивать секунды, и я не хочу, чтобы он ждал. До тех пор он может обрабатывать другие сообщения.

Текущий блок перехвата выглядит так:

catch (Exception ex)
                {
                    _logger.Error(ex, $"Failed to process request {requestId}");
                    totalAttempts++;

                    if (totalAttempts == MaxAttempts)
                        return new Response { Error = ex.ToString() };
                    
                    await Task.Delay(TimeSpan.FromSeconds(1));
                }

Я пробовал следующее, но он не увеличивает время экспоненциально. Пользуюсь этим впервые. while (true)

try
            {
                executemethod();
            }
catch (Exception ex)
                {
                    _logger.Error(ex, $"Failed to process request {requestId}");
                    totalAttempts++;

                    if (totalAttempts == MaxAttempts)
                        return new Response { Error = ex.ToString() };
                   queueClient.RetryPolicy = new RetryExponential(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(30), 10);
                    
                }

Я не очень уверен, правильно ли я делаю.

Цель: нужно повторить попытку со стратегией отката и сделать поток обработки доступным для других сообщения, ожидая следующей повторной попытки. Рассмотрим экспоненциальный откат с мертвыми буквами после достижения максимального числа попыток доставки.

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Многие Azure -ориентированные. NET библиотеки реализуют Retry внутренне. Клиент служебной шины также имеет встроенную функцию. Проверьте Рекомендации по повторным попыткам для Azure услуг . Согласно документации:

При использовании встроенной реализации RetryExponential, не не реализует операцию возврата , поскольку политика реагирует на исключения занятости сервера и автоматически переключает в соответствующий режим повтора.

В остальном вы должны установить политику до того, как сделаете запрос, а не в процессе.

0 голосов
/ 09 июля 2020

Для политик повтора вы также можете использовать внешнюю библиотеку, например Polly .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...