Служебная шина 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 - это правда.
Я прочитал эти посты и статьи уже:
- Руководство по повторной попытке шины обслуживания
- Политика повторных попыток Azure Service Bus не меняет поведение
Кто-нибудь когда-нибудь сталкивался с этим раньше? Надеюсь, я просто что-то упустил.
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.
После реализации интерфейса я смог успешно выполнить политику повторных попыток.
Я все еще не уверен, почему по умолчанию не будет работать, хотя.