首页 文章

Azure如何中断部署的辅助角色?

提问于
浏览
4

我正在将一些后台处理从Azure Web角色转移到辅助角色 . 我的工作人员需要每分钟左右完成一项任务,可能会产生任务:

while(true){
    //start some tasks

    Thread.Sleep(60000);
}

部署后,它将永远开始运行 . 所以稍后,当我重新部署时, how does Azure stop my process for redeployment?

它会立即杀死它吗?有没有办法得到它正在关闭的警告?我只需要确保一切都是交易性的吗?

1 回答

  • 10

    当要求角色(工作人员或Web)正常关闭(因为它被缩小或因为您要求重新部署)时,将调用RoleEntryPoint类的OnStop方法 . 这是具有Run方法的同一个类,它可能包含您的循环或调用包含该循环的代码 .

    这里要注意几点:OnStop有5分钟实际停止,之后该过程被简单地杀死 . 如果你必须调用别的东西来异步关闭,你需要让OnStop中的线程一直忙着等待其他进程关闭 . 一旦执行离开OnStop,平台就会假定机器可以关闭 .

    如果您需要优雅地停止处理但不需要关闭机器,那么您可以在服务配置文件中放置一个可以更新的设置,以指示应该完成工作或注意 . 所以例如一个说"ProcessQueues"的布尔 . 然后在RoleEntryPoint的onStart中挂钩RoleEnvironmentChanging事件 . 然后,您的事件处理程序将查找RoleEnvironmentConfigurationSettingChange,然后检查ProcessQueues bool . 如果确实如此,则启动或继续处理,如果为假,则优先停止处理 . 然后,您可以执行配置更改以控制何时运行 . 这是处理此问题的一种选择,还有更多选项取决于您需要多快停止处理等 .

相关问题