2

部署的第一个实例是否总是以零结尾?0. like "xxxx_IN_0" 当放大到 X 个实例时,下一个实例是否总是以 1 2 3 4 作为最后一个数字。( 我认同)。当我再次缩小规模时会发生什么?我读到它会随机选取其中一个实例。因此,当缩小到 1 个实例时,我不能假设我知道仍在运行的 ID 是什么?

有谁在放大和缩小时玩过ID并且知道这些事情吗?

我问的原因是我有一些额外的逻辑,我只想在一个实例上运行,而不是更少或更多。如果我可以假设“xxx_IN_0”始终存在,那么我可以通过简单检查最后一个 ID 是否为零来做到这一点。如果不是,我正在考虑检查所有 id,如果当前实例是最低的,那么它将发挥它的魔力。

如果是最后一种情况,在完成放大或缩小时是否有可以监控的事件?

更新

来自答案:

    if (RoleEnvironment.IsAvailable)
    {
        RoleEnvironment.Changed += RoleEnvironment_Changed;
    }

    void RoleEnvironment_Changed(object sender, RoleEnvironmentChangedEventArgs e)
    {
        var change = e.Changes.OfType<RoleEnvironmentTopologyChange>().FirstOrDefault();
        if (change != null)
        {
            Trace.TraceInformation("RoleEnvironmentTopologyChange at RoleName '{0}'", change.RoleName);
    }

当我扩大和缩小规模时,我的跟踪日志中没有任何信息。

必须设置一个内部端点来触发事件:

<InternalEndpoint name="InternalEndpoint1" protocol="http" />

http://blogs.msdn.com/b/windowsazure/archive/2011/01/04/responding-to-role-topology-changes.aspx

4

1 回答 1

4

您应该收听更改服务配置时发生的RoleEnvironment.Changed 事件。

当您收到此事件时,请检查RoleEnvironmentTopologyChange实例的Changes属性。当实例数量发生变化时,将报告此变化。

要确定应该在哪个服务器上运行额外的逻辑,您可以检查角色列表并从那里找到所有实例。按 id 对实例进行排序并选择第一个作为特殊实例。

但是,如果任何时候只有一服务器运行此特殊逻辑至关重要,那么您将需要一个更稳定的解决方案。

于 2013-05-31T12:39:55.300 回答