Min*_*yen 5 azure-storage-queues azure-webjobs
场景:生产者向存储队列发送消息,一个WebJobs在QueueTrigger上处理该消息,每条消息只能处理一次,可以有多个WebJob实例。
我一直在谷歌搜索,从我读过的内容来看,我需要编写处理消息的函数以使其具有幂等性,因此消息不会被处理两次。我还读到消息的默认租用时间为 10 分钟。
我的问题是,当在一个 WebJob 实例上触发 QueueTrigger 时,它是否设置了消息的租用时间,以便另一个 WebJob 无法获取相同的消息?如果是这样,为什么我需要考虑消息可以被处理两次的可能性?还是我误解了这一点?
小智 4
如果您使用内置队列触发器属性,它将自动确保任何给定消息都被处理一次,即使站点扩展到多个实例也是如此。这发布在讨论部分的文章中,https://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk-get-started/
在同一篇文章中,您将找到有关 10 分钟租用的说明。总之,QueueTrigger 属性指示 WebJobs SDK 在队列中收到新消息时调用方法。消息被处理,当该方法完成时,队列消息被删除。如果该方法在完成之前失败,则队列消息不会被删除;10 分钟租约到期后,消息将被释放以供再次拾取和处理。如果消息总是导致异常,则该序列不会无限期地重复。尝试处理消息 5 次失败后,该消息将被移至有害队列。最大尝试次数是可配置的。