Azure Cloud-Service OnStop

时间:2015-11-02 18:30:19

标签: c# azure azure-worker-roles azure-cloud-services

我使用Azure Cloud Worker Role来处理队列中的传入任务。每个任务的处理可能需要几个小时,每个工作者角色可以同时处理多达N个任务。基本上,它正在发挥作用。

现在,您可以在documentation中读取有时可以关闭工作者角色(用于软件更新,操作系统升级,......)。基本上,它很好。但是,此计划关闭不能强制停止已经运行的工作角色

预期:

在环境中调用OnStop()方法时:

  1. 辅助角色将停止处理新任务。
  2. 等待运行任务完成。
  3. 继续计划关机。
  4. 实际:

    OnStop()方法最多可以阻止 5分钟。我不能保证我会在5分钟内完成任务处理 - 所以,这就是问题......我的任务是在处理过程中被杀死,这对我的软件来说变得不稳定。

    我怎么能避免这5分钟的限制?欢迎任何提示。

2 个答案:

答案 0 :(得分:2)

  

我怎么能避免这5分钟的限制?

不幸的是,你不能。这是Azure方面施加的硬限制。你需要解决这个问题。

我可以想到两种可能的解决方案,它们都需要您重新考虑当前的架构:

  1. 将您的一项大任务分解为许多较小的任务,并创建某种工作流程。
  2. 使您的任务具有幂等性,以便即使它在两者之间被终止(由于工作者角色关闭或任务本身中的错误)以及当它被另一个实例接收时,它也会以这样的方式再次启动任务没有损坏。

答案 1 :(得分:1)

不,你不能绕过这个限制。通常,您不应该依赖任何长时间连续运行的实例。实例可能会突然停止,或者可能会突然消失(因为底层服务器出现故障)。您的软件应该设计为当重新启动实例(可能重新部署)或某个其他实例找到容量来获取先前发布的工作项时,工作项被重新处理而没有任何不利影响。