Service Bus 1.1(On Prem)消息发送方重试策略不起作用

时间:2017-02-16 16:53:49

标签: messaging servicebus retrypolicy

我不确定使用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);
}

为了测试目的,我已经使重试策略异常大。据我所知,它永远不会重试消息。我已经测试了各种例外情况,包括那些传输真实的情况。

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

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

2 个答案:

答案 0 :(得分:0)

重试机制就像这样工作

  

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

检查OperationTimeout

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

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

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

创建MessageFactory

之后

答案 1 :(得分:0)

我发现了这篇博文:

  

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

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

我仍然不确定为什么默认的不行。