0

不确定我的 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 为真的异常。

我已经阅读了这些帖子和文章:

有没有人遇到过这个?我希望我只是缺少一些简单的东西。

4

2 回答 2

0

重试机制是这样工作的

从服务总线返回的异常会公开指示客户端是否应重试操作的 IsTransient 属性。内置 RetryExponential 策略依赖于 MessagingException 类中的 IsTransient 属性,该类是所有服务总线异常的基类。

检查 OperationTimeout

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

如果该值小于 maxBackoff,则将 OperationTimeout 设置为高于 maxBackoff

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

创建 MessageFactory 后

于 2017-02-16T18:06:46.070 回答
0

我找到了这篇博文:

在解决方案资源管理器中右键单击您的项目,然后选择管理 NuGet 包。在搜索框中键入瞬态故障处理,然后单击搜索。选择企业库 - 瞬态故障处理应用程序块包。单击安装后,一组必要的程序集和支持瞬态故障处理应用程序块的引用将添加到项目中。

实现接口后,我能够成功执行重试策略。

我仍然不确定为什么默认设置不起作用。

于 2017-02-16T22:46:25.747 回答