C# Microsoft.Azure.ServiceBus-订阅客户端忽略RetryPolicy(RetryExponencial)

C# Microsoft.Azure.ServiceBus-订阅客户端忽略RetryPolicy(RetryExponencial),c#,servicebus,retrypolicy,C#,Servicebus,Retrypolicy,我正在尝试实施重试策略,但它一直被忽略。 SubscriptionClient中是否有覆盖我在创建客户端时提供的属性 以下是我尝试的代码: _retryPolicy = new Microsoft.Azure.ServiceBus.RetryExponential( TimeSpan.FromMinutes(2), // MinBackOff TimeSpan.FromMinutes(5), // Max

我正在尝试实施重试策略,但它一直被忽略。 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);
结果是完全一样的,所以我确信它被忽略了。 任何帮助都将不胜感激

继续做好工作。

用于服务总线客户机在出现暂时性错误时使用,而这些错误不会立即冒泡到您的代码中。即,客户端内置的内部重试机制,用于在引发异常之前代表您执行重试。如果没有异常,并且您的回调显式地放弃了消息,那么这里甚至不使用重试策略,消息只经过正常传递,直到MaxDeliveryCount次(在您的场景中为50次),然后是DQed

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

你可以阅读更多关于


希望有帮助。

重试策略仅在尝试执行操作时出错时适用。基础系统将尝试重试该操作,但不会引发异常。如果操作成功,例如读取成功,则不会应用重试。即使该消息稍后在代码中被放弃。@Kami感谢您的回复。我在代码的pourpouse上抛出一个异常,以便在出现错误时准确地进行验证。未发布该块,但在捕获消息后立即抛出异常。如果在基础类返回消息后抛出异常,则重试机制将不适用。就服务总线而言,您请求了一条消息,它给了您一条消息,而您选择不处理它。见-及相关感谢您的awnser。我理解你们所说的,这个RetryExponential只适用于瞬时错误,而不适用于引发异常的情况。但仍然有一些东西在重试,我无法控制它。因为在我的日志中,当我强制执行异常时会发生重试,所以它会以半秒的间隔重试8次。如何控制正在发生的重试?@MiguelVale重试次数由
MaxDeliveryCount
属性决定,重试间隔由客户端根据轮询数据的频率决定。感谢帮助,我们设法实现了自己的retrypolicy,这样我们就可以控制在引发异常后如何处理消息。