Microsoft.Azure.ServiceBus - SubscriptionClient игнорирует RetryPolicy (RetryExponencial) - PullRequest
2 голосов
/ 28 мая 2019

Я пытаюсь реализовать политику повторных попыток, но она продолжает игнорироваться.Есть ли в SubscriptionClient свойства, которые переопределяют те, которые я предоставляю при создании клиента?

Вот код, который я пробовал:

_retryPolicy = new Microsoft.Azure.ServiceBus.RetryExponential(
                       TimeSpan.FromMinutes(2), // MinBackOff
                       TimeSpan.FromMinutes(5), // MaxBackOff
                       3); // Max Retries

_subscriptionClient = new SubscriptionClient(
               serviceBusPersisterConnection.ServiceBusConnectionStringBuilder,
               subscriptionClientName, retryPolicy: _retryPolicy);

Так что это должно сделать только 3 раза повтор с минимальнымИнтервал 2 мин.Результат из журнала:

28 May 2019 16:34:49.928 MessageId: 1d327c9033de4fc69892766084264
28 May 2019 16:34:49.285 MessageId: 1d327c9033de4fc69892766084264
28 May 2019 16:34:48.718 MessageId: 1d327c9033de4fc69892766084264
28 May 2019 16:34:48.075 MessageId: 1d327c9033de4fc69892766084264
28 May 2019 16:34:47.499 MessageId: 1d327c9033de4fc69892766084264
28 May 2019 16:34:46.965 MessageId: 1d327c9033de4fc69892766084264
28 May 2019 16:34:46.511 MessageId: 1d327c9033de4fc69892766084264
28 May 2019 16:34:45.957 MessageId: 1d327c9033de4fc69892766084264

Как вы можете видеть, он повторяется 8 раз вместо 3, а время между попытками (это моя главная проблема) имеет интервал в полсекунды.

Дляубедитесь, что это была не моя политика повторных попыток, а я попробовал это:

_subscriptionClient = new SubscriptionClient(
              serviceBusPersisterConnection.ServiceBusConnectionStringBuilder,
              subscriptionClientName, retryPolicy: RetryPolicy.NoRetry);

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

Продолжайте в том же духе.

1 Ответ

0 голосов
/ 29 мая 2019

RetryExponential предназначен для использования клиентом служебной шины, если существуют временные ошибки, которые не сразу передаются в ваш код. То есть встроенный в клиент механизм повторных попыток для выполнения попыток от вашего имени до возникновения исключения. Если исключений нет, и ваш обратный вызов явно отменяет сообщение, политика повторных попыток здесь даже не используется, и сообщение просто проходит обычную доставку до времен MaxDeliveryCount (50 в вашем сценарии), после чего устанавливается DQed.

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

Вы можете узнать больше о здесь .

Надеюсь, это поможет.

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