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

ben*_*ree 4 azure azure-worker-roles

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

while(true){
    //start some tasks

    Thread.Sleep(60000);
}
Run Code Online (Sandbox Code Playgroud)

部署后,它将永远开始运行.所以稍后,当我重新部署时,Azure如何停止我的重新部署过程?

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

Mik*_*eWo 10

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

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

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