我正在尝试实现重试策略,但它一直被忽略。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);结果是完全一样的,所以我确定它被忽略了。任何帮助都将不胜感激。
保持良好的工作状态。
发布于 2019-05-29 14:52:35
RetryExponential旨在供服务总线客户端在出现暂时错误时使用,这些错误不会立即出现在您的代码中。即,内置在客户端中的内部重试机制,在异常引发之前代表您执行重试。如果没有异常,并且您的回调显式放弃了消息,这里甚至没有使用重试策略,消息只会经过正常的传递,直到MaxDeliveryCount次(在您的场景中是50次),之后就是DQed。
使用重试策略向Service bus客户端指定在放弃之前如何处理暂时性错误,而不是指定消息可以出队的次数。
你可以阅读更多关于here的内容。
希望能有所帮助。
https://stackoverflow.com/questions/56346614
复制相似问题