hja*_*her 3 azure-queues azure-webjobs azure-webjobssdk
我正在研究一个webjob,它检查Web服务器是否有一些数据.有时Web服务器很忙,几秒钟后会再次尝试.
问题是,如果我只是忽略它并通过该函数,它将从队列中删除该消息,我将无法重试该调用.
我当前的解决方案(我根本不喜欢)是通过一个异常来增加dequque数量并将消息放回队列中.然而,这似乎非常残酷,并且需要运行webjob的线程才能重新启动.
有没有其他办法处理这个?
如果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)
| 归档时间: |
|
| 查看次数: |
2944 次 |
| 最近记录: |