azure服务总线消息重新出现超时

时间:2018-02-01 05:47:25

标签: c# azure azureservicebus azure-servicebus-queues

如果我配置了服务总线代理消息接收器。它因任何原因失败了。我打电话给它

 message.abandon();

但是这意味着该消息将再次返回队列/订阅。

我可以配置超时,之后队列中可以使用相同的消息进行处理。

例如:如果队列中只有一条消息。并且它失败了,那么每隔一分钟或每分钟继续处理就不好了。如果我配置的东西,可以确定,失败/被遗弃的消息只在30分钟后重新出现。那很有用。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

当您放弃信息时,您无法提供“冷静”时间。该消息将立即可用。在MaxDeliveryCount尝试用尽之前,它不会被删除。一旦所有这些处理尝试都用完了,消息就会转到死信队列。

如果您需要推迟邮件处理,可以选择几个选项。

推迟发送消息

您可以使用BrokeredMessage.DeferAsync()推迟发送消息。该消息将返回队列以供将来处理,并将返回SequenceNumber消息。使用这种方法的警告是需要保留SequenceNumber以便稍后检索消息。如果您碰巧丢失了SequenceNumber,仍然可以浏览延期消息并检索这些消息。更多信息here

安排新的未来消息

另一种选择是克隆传入的失败消息,使用BrokeredMessage.ScheduledEnqueueTimeUTC将其安排一段时间并完成原始消息。使用此选项,我建议使用send-via feature(也称为Transaction Processing)发送将来安排的新消息,以利用完成传入消息和发送传出消息的原子操作。这样,如果完成失败,代码将不会产生“重影”消息。更多information here

使用客户端计划,而不是消息

另一种选择是安排使用客户端,而不是BrokeredMessage使用您需要保留的client.ScheduleMessageAsync(). It will return a SequenceNumber`,但使用此API可以在任何时间点取消消息等待计划时间到达或接收消息。更多information here