public async Task Start() { Container = new UnityContainer(); Systems = _actorSystemFactory.Invoke(); System = Systems.First(); System.InitDomainEventsSerialization(EventsAdaptersCatalog); _transportMode = Systems.Length > 1 ? TransportMode.Cluster : TransportMode.Standalone; System.RegisterOnTermination(OnSystemTermination); System.AddDependencyResolver(new UnityDependencyResolver(Container, System)); ConfigureContainer(Container, _quartzConfig, System); Transport = Container.Resolve <IActorTransport>(); _quartzScheduler = Container.Resolve <Quartz.IScheduler>(); _commandExecutor = Container.Resolve <ICommandExecutor>(); _waiterFactory = Container.Resolve <IMessageWaiterFactory>(); _commandWaiterFactory = Container.Resolve <ICommandWaiterFactory>(); EventBusForwarder = System.ActorOf(Props.Create(() => new EventBusForwarder(Transport)), nameof(EventBusForwarder)); var appInsightsConfig = Container.Resolve <IAppInsightsConfiguration>(); var perfCountersConfig = Container.Resolve <IPerformanceCountersConfiguration>(); var factories = Container.ResolveAll(typeof(IConstructAggregates)) .Select(o => new { Type = o.GetType(), Obj = (IConstructAggregates)o }) .Where(o => o.Type.IsGenericType && o.Type.GetGenericTypeDefinition() == typeof(AggregateSnapshottingFactory <>)) .Select(o => new { AggregateType = o.Type.GetGenericArguments().First(), Constructor = o.Obj }) .ToArray(); foreach (var factory in factories) { AggregateFromSnapshotsFactory.Register(factory.AggregateType, m => factory.Constructor.Build(factory.GetType(), Guid.Empty, m)); } if (appInsightsConfig.IsEnabled) { var monitor = new ActorAppInsightsMonitor(appInsightsConfig.Key); ActorMonitoringExtension.RegisterMonitor(System, monitor); } if (perfCountersConfig.IsEnabled) { ActorMonitoringExtension.RegisterMonitor(System, new ActorPerformanceCountersMonitor()); } _stopping = false; _log.Debug("Launching GridDomain node {Id}", Id); var props = System.DI().Props <GridNodeController>(); var nodeController = System.ActorOf(props, nameof(GridNodeController)); await nodeController.Ask <GridNodeController.Started>(new GridNodeController.Start { RoutingActorType = RoutingActorType[_transportMode] }); _log.Debug("GridDomain node {Id} started at home {Home}", Id, System.Settings.Home); }
public QuartzJob(IQuartzLogger quartzLogger, IPublisher publisher, IMessageWaiterFactory executor) { Condition.NotNull(() => quartzLogger); Condition.NotNull(() => publisher); _executor = executor; _quartzLogger = quartzLogger; _publisher = publisher; }
public async Task Start() { Log.Information("Starting GridDomain node {Id}", Id); _stopping = false; EventsAdaptersCatalog = new EventsAdaptersCatalog(); _containerBuilder = new ContainerBuilder(); System = _actorSystemFactory.Create(); System.RegisterOnTermination(OnSystemTermination); System.InitLocalTransportExtension(); Transport = System.GetTransport(); _containerBuilder.Register(new GridNodeContainerConfiguration(Transport, Log)); _waiterFactory = new MessageWaiterFactory(System, Transport, DefaultTimeout); Initializing.Invoke(this, this); System.InitDomainEventsSerialization(EventsAdaptersCatalog); ActorTransportProxy = System.ActorOf(Props.Create(() => new LocalTransportProxyActor()), nameof(ActorTransportProxy)); //var appInsightsConfig = AppInsightsConfigSection.Default ?? new DefaultAppInsightsConfiguration(); //var perfCountersConfig = AppInsightsConfigSection.Default ?? new DefaultAppInsightsConfiguration(); // //if(appInsightsConfig.IsEnabled) //{ // var monitor = new ActorAppInsightsMonitor(appInsightsConfig.Key); // ActorMonitoringExtension.RegisterMonitor(System, monitor); //} //if(perfCountersConfig.IsEnabled) // ActorMonitoringExtension.RegisterMonitor(System, new ActorPerformanceCountersMonitor()); _commandExecutor = await CreateCommandExecutor(); _containerBuilder.RegisterInstance(_commandExecutor); var domainBuilder = CreateDomainBuilder(); domainBuilder.Configure(_containerBuilder); Container = _containerBuilder.Build(); System.AddDependencyResolver(new AutoFacDependencyResolver(Container, System)); domainBuilder.Configure(Pipe); var nodeController = System.ActorOf(Props.Create(() => new GridNodeController(Pipe.CommandExecutor, ActorTransportProxy)), nameof(GridNodeController)); await nodeController.Ask <GridNodeController.Alive>(GridNodeController.HeartBeat.Instance); Log.Information("GridDomain node {Id} started at home {Home}", Id, System.Settings.Home); }