我使用Azure Cloud Worker Role来处理队列中的传入任务。每个任务的处理可能需要几个小时,每个工作者角色可以同时处理多达N个任务。基本上,它正在发挥作用。
现在,您可以在documentation中读取有时可以关闭工作者角色(用于软件更新,操作系统升级,......)。基本上,它很好。但是,此计划关闭不能强制停止已经运行的工作角色。
预期:
在环境中调用OnStop()方法时:
实际:
OnStop()方法最多可以阻止 5分钟。我不能保证我会在5分钟内完成任务处理 - 所以,这就是问题......我的任务是在处理过程中被杀死,这对我的软件来说变得不稳定。
我怎么能避免这5分钟的限制?欢迎任何提示。
答案 0 :(得分:2)
我怎么能避免这5分钟的限制?
不幸的是,你不能。这是Azure方面施加的硬限制。你需要解决这个问题。
我可以想到两种可能的解决方案,它们都需要您重新考虑当前的架构:
答案 1 :(得分:1)
不,你不能绕过这个限制。通常,您不应该依赖任何长时间连续运行的实例。实例可能会突然停止,或者可能会突然消失(因为底层服务器出现故障)。您的软件应该设计为当重新启动实例(可能重新部署)或某个其他实例找到容量来获取先前发布的工作项时,工作项被重新处理而没有任何不利影响。