【发布时间】:2015-06-30 08:22:33
【问题描述】:
我得到了一个包含 4 个工作角色的云服务部署,其中一个启用了自动扩展。一旦发生自动缩放,所有角色的所有实例都会被回收。
理想情况下,我想阻止角色回收或至少以受控方式终止所有其他角色的工作。
我发现,您可以react to the RoleEnvironment.Changing event 并取消它以请求正常关闭(即调用 OnStop)。但是,通过将跟踪输出添加到更改事件处理程序,我注意到更改事件显然甚至没有被触发,因此取消也没有被注册。
private void RoleEnvironmentChanging(object sender, RoleEnvironmentChangingEventArgs e)
{
// This tracing output does not show up in the logs table.
Trace.TraceInformation("RoleEnvironmentChanging event fired.");
if ((e.Changes.Any(change => change is RoleEnvironmentConfigurationSettingChange)))
{
// This one neither.
Trace.TraceInformation("One of the changes is a RoleEnvironmentConfigurationSettingChange. Cancelling..");
e.Cancel = true;
}
if ((e.Changes.Any(change => change is RoleEnvironmentTopologyChange)))
{
// This one neither.
Trace.TraceInformation("One of the changes is a RoleEnvironmentTopologyChange. Cancelling.");
e.Cancel = true;
}
}
public override bool OnStart()
{
// Hook up to the changing event to prevent roles from unnecessarily restarting.
RoleEnvironment.Changing += RoleEnvironmentChanging;
// Set the maximum number of concurrent connections
ServicePointManager.DefaultConnectionLimit = 12;
bool result = base.OnStart();
return result;
}
还有adding an internal endpoint给每个角色带来的变化也没有。这里的配置来自 .csdef:
<WorkerRole name="MyRole" vmsize="Medium">
[...ConfigurationSettings...]
<Endpoints>
<InternalEndpoint name="Endpoint1" protocol="http" />
</Endpoints>
</WorkerRole>
将协议更改为“any”也没有成功。
如何在扩展操作后阻止我的角色实例回收?
编辑:
» 包含代码 sn-ps
» 修正错别字
【问题讨论】:
标签: c# .net azure azure-worker-roles azure-cloud-services