Служебная шина 1.1 (на прем) Политика повторной отправки отправителя сообщения не работает

Не уверен, что не так с моей логикой политики повтора с Service Bus 1.1. Мы не можем использовать служебный автобус Azure. Я пробовал несколько разных конфигураций, но все же не повезло, что его сработало. Это просто переместится прямо к исключению.

TokenProvider provider = TokenProvider.CreateSharedAccessSignatureTokenProvider("RootManageSharedAccessKey", "<key goes here>");
var retryPolicy = new RetryExponential(TimeSpan.FromSeconds(10), TimeSpan.FromMinutes(3),
                TimeSpan.FromSeconds(10), TimeSpan.FromMinutes(5), 1000);
var _factory = MessagingFactory.Create("<Namespace Address>", provider);
var _sender = _factory.CreateMessageSender("Analytics");
_sender.RetryPolicy = retryPolicy;
var message = new BrokeredMessage("message");
try
{
   _sender.Send(message);
}
catch(Exception e) 
{
    Console.WriteLine(e);
}

Я сделал политику повтора необычно большой для тестирования. Насколько я могу сказать, он никогда не повторяет сообщение. Я проверил различные исключения, в том числе те, где istransient - это правда.

Я прочитал эти посты и статьи уже:

Кто-нибудь когда-нибудь сталкивался с этим раньше? Надеюсь, я просто что-то упустил.

2 ответа

Механизм повтора работает так

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

проверьте OperationTimeout

console.WriteLine(_factory.GetSettings().OperationTimeout);

Если значение меньше, чем maxBackoff, тогда установите OperationTimeout выше, чем maxBackoff

_factory.GetSettings().OperationTimeout = TimeSpan.FromMinutes(6);

после создания MessageFactory

Я нашел этот пост в блоге:

Щелкните правой кнопкой мыши свой проект в обозревателе решений и выберите Управление пакетами NuGet. Введите Transient Fault Handling в поле поиска и нажмите Поиск. Выберите Корпоративную библиотеку - Пакет прикладных программ для обработки временных ошибок. После того, как вы нажмете "Установить", в проект будет добавлен набор необходимых сборок и ссылок, которые поддерживают блок приложения Transient Fault Handling.

После реализации интерфейса я смог успешно выполнить политику повторных попыток.

Я все еще не уверен, почему по умолчанию не будет работать, хотя.

Другие вопросы по тегам