11

对于任何普通的 Azure 队列,我都会弹出一条消息,然后做一些工作。在工作完成之前,我不想删除该消息。

该消息在被视为失败并在队列中再次可见之前保持隐藏多长时间?

例如。

var message = myQueue.GetMessage();

 // Do Work ..

myQueue.DeleteMessage();

我的工作可能需要.. 30 秒或其他时间。或者如果花了.. 1 分钟或 2 分钟会发生什么?

我基本上不希望消息在工作完成之前再次可用,以防另一个工作人员将其从队列中弹出......即使这个工作人员仍在工作

我们可以设置“隐藏”时间吗?

4

2 回答 2

18

我们可以设置“隐藏”时间吗?

是的。您可以设置对其他呼叫者隐藏消息的时间。如果您查看 REST API 文档Get Messages,它需要一个名为visibilitytimeout. 此参数负责将消息隐藏指定的秒数。在该时间段过去后,如果未删除该消息,则该消息将再次可见。

该消息在被视为失败并在队列中再次可见之前保持隐藏多长时间?

如果您使用的是 .Net Storage Client 库,则可以选择指定可见性超时期限。查看文档,了解Get Message可以在哪里指定可见性超时。由于这是库中的可选参数(但在 REST API 级别需要)​​,因此库提供的默认值为 90 秒。

于 2013-10-16T07:27:04.873 回答
10

您可以将 Visibility Timeout 指定为 GetMessage() 重载之一的参数。您还可以使用 UpdateMessage() 来扩展消息的不可见性。但是,您永远不能保证消息不会被处理两次 - 例如,消费者在完成工作但在删除消息之前死亡。Windows Azure 队列是一个尽力而为的 FIFO 队列 - 具有至少一次语义。

于 2013-10-16T07:26:26.503 回答