在再次显示消息之前,消息在Azure队列中保留多长时间?

Pur*_*ome 7 .net c# azure azure-queues

使用任何正常的Azure队列,我弹出一条消息,然后做一些工作.在完成工作之前,我不想删除该消息.

多久该消息保持隐藏它被视为失败,是由前可见再次在队列中?

例如.

var message = myQueue.GetMessage();

 // Do Work ..

myQueue.DeleteMessage();
Run Code Online (Sandbox Code Playgroud)

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

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

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

Gau*_*tri 16

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

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

在消息被视为失败并在队列中再次显示之前,该消息会保留多长时间?

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

  • 当您使消息出队(使用“获取消息”)时,会得到一个“ popreceipt”,可用于删除该消息。这个“ popreceipt”保持有效,直到时间消息再次出队。因此,只要您的消息没有出队,就可以删除该消息,即使可见性超时时间已过期。请在此处阅读“备注”部分:https://msdn.microsoft.com/en-us/library/azure/dd179347.aspx。HTH。 (2认同)

Nei*_*zie 10

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