Mat*_*rts 5 azure azure-webjobs
主题说这一切真的:)说我有一个非常繁忙的Azure连续webjob正在从天蓝色的队列处理:
public static void ProcessQueue([QueueTrigger("trigger")] Info info)
{ .... }
Run Code Online (Sandbox Code Playgroud)
如果我重新部署webjob,我可以看到任何当前正在执行的作业似乎已中止(我看到"Never Finished"状态).在我发布后,这项工作是重播还是永远丢失了?
另外,有一种很好的方法可以确保在部署webjobs时没有正在运行的作业,或者由开发人员编写解决方案(例如每次运行时检查的配置标志).
谢谢
当使用WebJobs SDK的WebJob从队列中获取消息时,它会以10分钟的租约获取它.如果作业进程在处理消息时死亡,则租约将在10分钟后到期,并且消息将返回队列中.如果WebJob重新启动,它将再次选择该消息.仅当函数成功完成时才会删除该消息.
因此,如果作业死亡并立即重新启动(例如重新部署),则可能需要长达10分钟才能再次选择该消息.此外,因此,建议您自己保存状态或使函数具有幂等性.
在WebJobs仪表板中,您将看到对同一消息的两次调用.其中一个将被标记为Never Finished
因为函数执行从未完成.
不幸的是,没有开箱即用的解决方案来防止在部署期间运行作业.您必须创建自己的逻辑,通知(通过队列消息?)部署是关于开始,然后中止主机.主机中止将等待任何现有功能停止并阻止新功能启动.但是,如果您有多个webjob实例,这是一个非常棘手的情况,因为只有其中一个实例会收到通知.
归档时间: |
|
查看次数: |
875 次 |
最近记录: |