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

现在,您可以在 documentation 中读到,有时可以关闭辅助角色(用于软件更新、操作系统升级……)。基本上,没问题。但是, 这个计划关闭不能强制停止已经运行任务的工作角色

预期的:

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

  • 辅助角色将停止获取新任务进行处理。
  • 等待运行任务完成。
  • 继续按计划关闭。

  • 实际的:

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

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

    最佳答案



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

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

  • 将您的一项大任务分解为许多小任务并创建某种工作流程。
  • 使您的任务具有幂等性,以便即使它在两者之间终止(由于工作角色关闭或任务本身出错)并且当它被另一个实例接收时,它也会以这样的方式重新启动,您的任务输出是没有损坏。
  • 关于c# - Azure 云服务 OnStop,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33484445/

    10-12 23:17