2

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

所以这应该使它只重试 3 次,间隔最少 2 分钟。来自日志的结果:

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

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

保持良好的工作。

4

1 回答 1

1

RetryExponential旨在由服务总线客户端在存在未立即冒泡到您的代码的瞬时错误时使用。即客户端内置的内部重试机制,在引发异常之前代表您执行重试。如果没有异常并且您的回调明确放弃消息,则此处甚至不使用重试策略,并且消息仅通过正常传递最多 MaxDeliveryCount 次(在您的方案中为 50 次),之后是 DQed。

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

你可以在这里阅读更多信息。

希望能帮助到你。

于 2019-05-29T06:52:34.787 回答