2015-11-02 298 views
2

我使用Azure云工作者角色处理来自队列的传入任务。每个任务的处理可能需要几个小时,每个工作角色可以同时处理多达N个任务。基本上,它工作。Azure云服务OnStop

现在,您可以在documentation中看到,工作人员时常可以关闭(用于软件更新,OS升级等)。基本上,没关系。但是,此计划的关机不能强制停止已经运行的任务的工作人员角色。

预计:

当调用由环境调用OnStop()方法:

  1. 辅助角色将停止获取新的任务进行处理。
  2. 等待运行任务完成。
  3. 继续计划关机。

实际:

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

我怎样才能避免这5分钟的限制?任何提示将受到欢迎。

回答

2

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

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

有两个可能的解决方案,我能想到的,他们都需要你重新思考你目前的架构:

  1. 打破你的一个大任务分解成很多较小的任务和创建某种工作流程。
  2. 使您的任务具有幂等性,以便即使它在两者之间终止(因为工作者角色关闭或任务本身出错)以及当它被另一个实例拾取时,它也会以这样的方式再次启动:输出任务没有损坏。
1

不,你不能绕过这个限制。一般来说,你不应该依赖你的任何实例长时间连续运行。实例可能会突然停止,或者它们可能突然消失(因为服务器底层故障)。您应该设计软件,以便在实例重新启动(可能重新部署)或某个其他实例找到容纳先前释放的工作项目的情况下重新处理工作项目,而没有任何不利影响。