【发布时间】:2014-02-27 11:48:10
【问题描述】:
Azure 服务总线支持内置的重试机制,该机制使放弃的消息立即可见,以便再次尝试读取。我正在尝试使用这种机制来处理一些暂时性错误,但消息在被放弃后立即可用。
我想做的是让消息在被放弃后的一段时间内不可见,最好是基于指数递增的策略。
我尝试在放弃消息时设置ScheduledEnqueueTimeUtc属性,但似乎没有效果:
var messagingFactory = MessagingFactory.CreateFromConnectionString(...);
var receiver = messagingFactory.CreateMessageReceiver("test-queue");
receiver.OnMessageAsync(async brokeredMessage =>
{
await brokeredMessage.AbandonAsync(
new Dictionary<string, object>
{
{ "ScheduledEnqueueTimeUtc", DateTime.UtcNow.AddSeconds(30) }
});
}
});
我考虑过根本不放弃消息而只是让锁过期,但这需要有一些方法来影响MessageReceiver 如何指定消息的锁定持续时间,而我在其中找不到任何内容让我更改此值的 API。此外,在已经需要锁定之前,无法读取消息的传递计数(并因此决定等待下一次重试的时间)。
消息总线中的重试策略是否会受到某种方式的影响,或者是否可以通过其他方式人为地引入延迟?
【问题讨论】:
-
由于没有任何立即好的答案,我已经在服务总线用户语音上打开了一个请求:feedback.windowsazure.com/forums/216926-service-bus/suggestions/…。随意支持或忽略。
标签: azure azureservicebus