Orleans 3 Silo

Silo生命周期

orleans silo使用了一个可观察的生命周期,用于orleans系统和应用层组件的有序启动和关闭。

        public static class ServiceLifecycleStage
        {
            //服务生命周期第一阶段
            public const int First = int.MinValue;
            //初始化运行时环境,Silo初始化线程
            public const int RuntimeInitialize = 2000;
            //开始运行时服务。Silo初始化网络和各种代理
            public const int RuntimeServices = 4000;
            //初始化运行时存储
            public const int RuntimeStorageServices = 6000;
            //开始为grains提供运行时服务。包括grain类型管理,成员服务和grain目录
            public const int RuntimeGrainServices = 8000;
            //应用服务,应用层服务
            public const int ApplicationServices = 10000;
            //变成激活,Silo加入集群
            public const int BecomeActive = Active - 1;
            //激活,Silo在集群中被激活并准备接受负载
            public const int Active = 20000;
            //服务声明周期最后阶段
            public const int Last = int.MaxValue;
        }

 

因为Ioc的原因,并不是很清楚的能从代码中了解到启动和关闭顺序。所以Silo启动时自带了日志记录。

应用逻辑可以加入到silo的生命周期中,只要在silo的服务容器中注册一个参与服务即可。服务必须注册为ILifecycleParticipant。

public interface ISiloLifecycle : ILifecycleObservable
{
}

public interface ILifecycleParticipant<TLifecycleObservable>
    where TLifecycleObservable : ILifecycleObservable
{
    void Participate(TLifecycleObservable lifecycle);
}

当silo启动时,所有容器中的参加者都会被因为自己的方法被调用而有机会参加。因此,所有的参加者都有机会参加,silo的服务生命周期会保证全程有序。

 

posted @ 2020-06-22 15:26  NicolasLiaoRan  阅读(301)  评论(0编辑  收藏  举报