c# - Microsoft.Azure.ServiceBus - SubscriptionClient 忽略 RetryPolicy (RetryExponencial)

标签 c# servicebus retrypolicy

我正在尝试实现重试政策,但它一直被忽略。 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);

因此,这应该使其仅以最少 2 分钟的间隔重试 3 次。 日志结果:

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);

结果完全一样,所以我确定它被忽略了。 任何帮助将不胜感激。

继续努力。

最佳答案

RetryExponential旨在供服务总线客户端在存在不会立即冒泡到您的代码的暂时性错误时使用。 IE。客户端内置的内部重试机制,用于在引发异常之前代表您执行重试。如果没有异常并且您的回调显式放弃消息,则此处甚至不使用重试策略,并且消息只是通过正常传递达到 MaxDeliveryCount 次(在您的场景中为 50 次),之后是 DQed。

使用重试策略向服务总线客户端指定在放弃之前如何处理暂时性错误,而不是消息可以出列多少次。

您可以阅读更多关于 here 的信息.

希望对您有所帮助。

关于c# - Microsoft.Azure.ServiceBus - SubscriptionClient 忽略 RetryPolicy (RetryExponencial),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56346614/

相关文章:

2015 年 Azure 队列存储正确的调用模式?

go - 如何模拟第二次尝试 http 调用?

c# - LINQ 查询中的 Decimal.TryParse - 如何使用 out 参数并避免二次转换

azure - Azure 上管理大量数据并将其按订单交付给许多订阅者的最佳服务是什么

c# - 如何向我的 DataGridView 中的某些(不是全部)列添加按钮?

azure - 如何查询Azure服务总线中$DeadLetterQueue的MessageCount?

azure - 如果异步发送消息,Azure 服务总线队列中的消息顺序是什么?

Azure WebJob QueueTrigger 重试策略

c# - 为什么这段带有 PredicateBuilder 的代码不起作用?

c# - Asp.Net MVC 4 API : Download of docx failing in IE8