Webjobs会自动续订Azure Queue消息的租约吗?

Nur*_*mir 13 c# azure azure-storage-queues azure-webjobs

当Webjobs通过QueueTrigger从Azure存储上的队列中获取消息时,它会租用该消息(使其不可见).如果(webjob的)触发功能需要很长时间来处理消息,这个租约是否会自动扩展?或者我应该在功能中处理?

在此链接Windows Azure队列:改进租约,进度跟踪和未来工作的调度,作者声明" 消息的租约可以由执行原始出列的工作人员扩展,以便它可以继续处理消息 "

注意:我尝试了一个等待20分钟的webjob(带有QueueTrigger).

//Write Log
Thread.Sleep(1200000);
//Write Log
Run Code Online (Sandbox Code Playgroud)

它成功完成.在此期间,没有其他webjob实例尝试尝试相同的队列项(它没有变得可见).因此,似乎存在租赁的自动更新机制.无论如何,我正在等待微软员工的回答或官方链接(msdn,azure,...).

Sve*_*man 13

是的,您的租约会自动延长.每次10分钟.

请参阅此处的答案[1],微软员工将参考azure.microsoft.com上的文档和评论[2].

编辑(长答案)

此外,还要查看源代码,从https://github.com/Azure/azure-webjobs-sdk/blob/cfc875a7f00e595410c0603e6ca65537025490a9/src/Microsoft.Azure.WebJobs.Host/Queues/Listeners/QueueListenerQueueListener上课开始.cs表示相同.

代码在QueueListener138行有相关部分,其中visibilityTimeout定义了10分钟变量:

TimeSpan visibilityTimeout = TimeSpan.FromMinutes(10); // long enough to process the job
Run Code Online (Sandbox Code Playgroud)

然后传递该变量ProcessMessageAsync,从而启动方法中定义的CreateUpdateMessageVisibilityTimer具有相同值的计时器.10分钟值用于确定第一次和下次更新可见性超时的时间(通过将其减半并创建LinearSpeedupStrategy类的实例).

最后,在类UpdateQueueMessageVisibilityCommand[3]中,您会发现UpdateMessageAsync队列中的方法被调用,同样的10分钟更新.

LinearSpeedupStrategy5分钟后会再次续约,除非续约失败,在这种情况下,将在1分钟后再试一次(定义QueueListener).

[1] Azure存储队列和多个WebJobs实例:QueueTrigger会在触发时设置消息租约时间吗?

[2] https://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk-get-started/

[3] https://github.com/Azure/azure-webjobs-sdk/blob/cfc875a7f00e595410c0603e6ca65537025490a9/src/Microsoft.Azure.WebJobs.Host/Queues/Listeners/UpdateQueueMessageVisibilityCommand.cs