繁体   English   中英

防止Azure在处理时停止工作

[英]Prevent Azure from Stopping Worker While Processing

这可能是一个简单的问题,但我还没有看到直接的答案。 假设我正在使用Azure辅助角色来执行某种长时间运行的任务,比如一个需要一个小时的任务。 现在说MS决定工作者角色需要对其进行一些维护,并尝试将其关闭30分钟。

有没有办法让Azure等到该角色完成运行以进行维护? 我确实看到了OnStop方法,但似乎你只能在关闭之前让事情延迟一段时间。

如果这是不可能的,那么你如何计划这个需要相当长时间并且不能分成更小块的操作呢? 您是否只需回滚先前所做的任何更改,然后重试该任务?

您可以处理Stopping事件以延迟实例关闭(在正常关闭模式下)。 在崩溃的情况下,你无法真正阻止关机......

这是缓解的建议。 假设你的任务是队列驱动的。 让我们假装你的消息看起来像PROCESSWIDGET|123

您在工作器实例中读取队列消息并开始处理。 您可以在整个过程中修改队列消息,并记录您的进度。 因此,在这个虚构的例子中,假设有4个步骤来完成长达一小时的任务,每个步骤需要15分钟。 每个步骤完成后,您可以更新消息,附加检查点状态。 在完成第一个任务后,您将更新消息,现在它看起来像PROCESSWIDGET|123|STEP2

现在......出现问题,VM实例因某种原因而死亡。 队列消息最终再次可见,另一个工作器实例读取它,并看到附加下一步要执行的消息。 假设您已将中间文件存储在Blob存储(或其他一些持久存储)中,您可以从中断的地方继续,而不是从头开始重新处理。

有关UpdateMessage()方法的详细信息,请参阅此MSDN页面

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM