Azure Webjobs SDK和队列处理错误

hja*_*her 3 azure-queues azure-webjobs azure-webjobssdk

我正在研究一个webjob,它检查Web服务器是否有一些数据.有时Web服务器很忙,几秒钟后会再次尝试.

问题是,如果我只是忽略它并通过该函数,它将从队列中删除该消息,我将无法重试该调用.

我当前的解决方案(我根本不喜欢)是通过一个异常来增加dequque数量并将消息放回队列中.然而,这似乎非常残酷,并且需要运行webjob的线程才能重新启动.

有没有其他办法处理这个?

Vic*_*aci 5

如果webjobs SDK抛出异常,它将重试队列触发的函数.重试次数通过此处所述的JobHostConfiguration.Queues.MaxDequeueCount属性进行配置.

如果您不想依赖SDK的重试策略,您始终可以在自己的代码中处理异常并重试.只需捕获异常或服务器繁忙时发生的任何事情,然后重试该操作直到成功为止.但是,这正是SDK在场景背后所做的事情,并且通过自己执行此操作,您无法自动移动到毒性队列功能.

除非该函数不能设计为可重入,否则我建议让SDK执行重试作业.如果您仍然决定自己处理它,代码的外观如下:

public static void WebJobFunction([QueueTrigger("temp")] string message)
{
    int retriesLeft= 5;

    while(true) 
    {
       try
       {
            --retriesLeft;
            DoServerOperation(message);
            break;

        }
        catch(TimeoutException)
        {
            if (retriesLeft == 0) 
            {
               throw;
            }
        }       
    }
}
Run Code Online (Sandbox Code Playgroud)