Я получил развертывание Cloud Service с 4 рабочими ролями, один из которых активировал автомасштабирование. Как только происходит автоматическое масштабирование, все экземпляры всех ролей утилизируются.
В идеале я хотел бы остановить роли от повторного использования или, по крайней мере, закончить работу всех других ролей контролируемым образом.
Я узнал, что вы можете реагировать на событие RoleEnvironment.Changing и отменить его, чтобы запросить изящное завершение работы (т.е. вызвать 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;
}
Также добавление внутренней конечной точки для каждой роли не принесло изменений. Здесь конфигурация из .csdef:
<WorkerRole name="MyRole" vmsize="Medium">
[...ConfigurationSettings...]
<Endpoints>
<InternalEndpoint name="Endpoint1" protocol="http" />
</Endpoints>
</WorkerRole>
Также изменение протокола на "any" не было успешным.
Как я могу остановить экземпляры своей роли после повторного использования после операции масштабирования?
EDIT:
& RAQUO; Включенные фрагменты кода
& RAQUO; Исправлены опечатки