我正在使用在存储队列上有新消息时触发的Azure功能(用C#编写)。该功能正在调用外部Web服务来处理消息,并且当外部服务响应时,一切正常。如何在失败后延迟Azure功能的执行?
问题是当外部网站关闭时,web客户端发出异常(没有围绕它的try/catch块)。接下来会发生的事情是该函数被重试(通过天蓝色)5次,每次尝试之间不到1秒。正如你可以想象的那样,Web服务可能仍然会关闭所有5次尝试,这将使Azure将消息转移到“毒药”队列。
是否可以配置重试之前等待的时间量,还是需要设置另一个每分钟运行一次的azure函数来检查消息的毒性队列,然后需要在正常队列?
感谢您的快速回复,这个想法很好。然而,问题在于Azure第二次收到这些函数,因此在它内部运行Thread.Sleep(30000)将会非常昂贵。 – Espo
然后不要等待30秒。放弃。你不会删除它,因为你没有删除它。它会在'visibility_timeout'中再次显示。队列中的消息顺序将被拧紧,但如果你能容忍,我没有看到任何其他缺点。 – evilSnobu
也许我误解了你,但是如果我刚刚退出这个功能,azure会认为这个消息已经成功处理了,并且它将永远消失。我还没有发现如何从azure函数中更改/设置visibility-timeout。 – Espo