我有一个Azure WebJob(.NET Core-SDK 3),当队列触发的函数执行失败时,它会制动。我希望此WebJob像在Windows WebApp上运行的其他WebJob(SDK 2-.NET Framework)一样工作。
当在WebJobs SDK 2(Windows WebApp)上执行队列触发的函数失败时,消息将以DequeueCount递增的方式发送回队列,并且在X次(默认值为5)之后,消息将发送至poison
队列。而且WebJob始终保持运行。
WebJobs SDK 3是否可能具有相同的行为?这是描述的行为(webjobs.ricardogaefke.com)的示例。在这种情况下,我需要使用try / catch并将消息手动发送到poison
队列,这浪费了webjobs的功能(这种方式会丢失重试)。
非常感谢。
我使用FunctionExceptionFilterAttribute
找到了解决方案。函数的筛选器与ASP.NET MVC筛选器类似,在我的情况下,即使出现错误,我也可以处理WebJob函数中的错误并返回完整的Task
,因此消息将使用DequeueCount ++发送到队列(直到出队的限制) -默认值为5)。
最终解决方案可以在webjobs.ricardogaefke.com处找到,并且在How it works
页面上具有指向GitHub存储库,公共Azure Pipelines和公共Docker注册表的链接。