首页 文章

Azure Cloud-Service OnStop

提问于
浏览
2

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

现在,您可以阅读documentation,有时可以关闭辅助角色(用于软件更新,操作系统升级,...) . 基本上,这很好 . 但是, this planned shutdown cannot forcedly stop the worker-role already running tasks .

预期:

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

  • worker角色将停止获取要处理的新任务 .

  • 等待运行任务完成 .

  • 继续计划关机 .

实际:

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

我怎么能避免这5分钟的限制?任何小费都将受到欢迎 .

2 回答

  • 2

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

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

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

    • 将您的一项大任务分解为许多较小的任务并创建某种工作流程 .

    • 使您的任务具有幂等性,以便即使它在两者之间被终止(由于工作者角色关闭或任务本身中的错误)以及当它被另一个实例接收时,它也会以这样的方式再次启动,即您的任务输出是没有腐败 .

  • 1

    不,你不能绕过这个限制 . 通常,您不应该依赖任何长时间连续运行的实例 . 实例可能会突然停止或突然消失(因为基础服务器故障) . 您的软件应设计为当重新启动实例(可能已重新部署)或某个其他实例找到容量以获取先前释放的工作项时,将重新处理工作项而不会产生任何不利影响 .

相关问题