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的服务生命周期会保证全程有序。