public SchedulingConfiguration(IQuartzConfig quartzConfig, ILogger logger, IPublisher publisher, ICommandExecutor executor)
 {
     _commandExecutor = executor;
     _publisher       = publisher;
     _logger          = logger;
     _quartzConfig    = quartzConfig;
 }
Esempio n. 2
0
 public GridNodeContainerConfiguration(ActorSystem actorSystem,
                                       TransportMode transportMode,
                                       IQuartzConfig config)
 {
     _config        = config;
     _transportMode = transportMode;
     _actorSystem   = actorSystem;
 }
Esempio n. 3
0
 public GridDomainNode(IContainerConfiguration configuration,
                       IMessageRouteMap messageRouting,
                       Func <ActorSystem[]> actorSystemFactory,
                       IQuartzConfig quartzConfig = null)
 {
     _actorSystemFactory = actorSystemFactory;
     _quartzConfig       = quartzConfig ?? new InMemoryQuartzConfig();
     _configuration      = configuration;
     _messageRouting     = new CompositeRouteMap(messageRouting,
                                                 new TransportMessageDumpMap()
                                                 );
 }
Esempio n. 4
0
 public SchedulerFactory(
     IQuartzConfig config,
     ILoggingSchedulerListener loggingSchedulerListener,
     ILoggingJobListener loggingJobListener,
     IJobFactory jobFactory,
     IRetrySettings retrySettings
     )
 {
     _retrySettings            = retrySettings;
     _config                   = config;
     _loggingSchedulerListener = loggingSchedulerListener;
     _loggingJobListener       = loggingJobListener;
     _jobFactory               = jobFactory;
 }
Esempio n. 5
0
        //TODO: refactor to good config via IContainerConfiguration
        public static void Init(IUnityContainer container,
                                ActorSystem actorSystem,
                                TransportMode transportMode,
                                IQuartzConfig config = null)
        {
            container.Register(new QuartzSchedulerConfiguration(config ?? new PersistedQuartzConfig()));
            container.RegisterInstance <IRetrySettings>(new InMemoryRetrySettings(5,
                                                                                  TimeSpan.FromMinutes(10),
                                                                                  new DefaultExceptionPolicy()));

            //TODO: replace with config
            IActorTransport transport;

            switch (transportMode)
            {
            case TransportMode.Standalone:
                transport = new LocalAkkaEventBusTransport(actorSystem);
                break;

            case TransportMode.Cluster:
                transport = new DistributedPubSubTransport(actorSystem);
                break;

            default:
                throw new ArgumentException(nameof(transportMode));
            }

            container.RegisterInstance <IPublisher>(transport);
            container.RegisterInstance <IActorSubscriber>(transport);
            container.RegisterInstance <IActorTransport>(transport);

            container.RegisterType <IHandlerActorTypeFactory, DefaultHandlerActorTypeFactory>();
            container.RegisterType <IAggregateActorLocator, DefaultAggregateActorLocator>();
            container.RegisterType <IPersistentChildsRecycleConfiguration, DefaultPersistentChildsRecycleConfiguration>();
            container.RegisterInstance <IAppInsightsConfiguration>(AppInsightsConfigSection.Default ??
                                                                   new DefaultAppInsightsConfiguration());
            container.RegisterInstance <IPerformanceCountersConfiguration>(PerformanceCountersConfigSection.Default ??
                                                                           new DefaultPerfCountersConfiguration());

            container.RegisterInstance(actorSystem);

            var executor = new AkkaCommandExecutor(actorSystem, transport);

            container.RegisterType <ICommandExecutor, AkkaCommandExecutor>();
            var messageWaiterFactory = new MessageWaiterFactory(executor, actorSystem, TimeSpan.FromSeconds(15), transport);

            container.RegisterInstance <IMessageWaiterFactory>(messageWaiterFactory);
            container.RegisterInstance <ICommandWaiterFactory>(messageWaiterFactory);
        }
Esempio n. 6
0
        private void ConfigureContainer(IUnityContainer unityContainer,
                                        IQuartzConfig quartzConfig,
                                        ActorSystem actorSystem)
        {
            unityContainer.Register(new GridNodeContainerConfiguration(actorSystem,
                                                                       _transportMode,
                                                                       quartzConfig));

            _configuration.Register(unityContainer);

            var persistentScheduler = System.ActorOf(System.DI().Props <SchedulingActor>(), nameof(SchedulingActor));

            unityContainer.RegisterInstance(new TypedMessageActor <ScheduleMessage>(persistentScheduler));
            unityContainer.RegisterInstance(new TypedMessageActor <ScheduleCommand>(persistentScheduler));
            unityContainer.RegisterInstance(new TypedMessageActor <Unschedule>(persistentScheduler));
            unityContainer.RegisterInstance(_messageRouting);
        }
Esempio n. 7
0
        public static NodeTestFixture EnableScheduling(this NodeTestFixture fixture, IQuartzConfig config = null, bool clearScheduledData = true)
        {
            IQuartzConfig quartzConfig = config ?? new InMemoryQuartzConfig(new InMemoryRetrySettings(5, TimeSpan.FromMinutes(10), new DefaultExceptionPolicy()));

            fixture.OnNodeCreatedEvent += (o, node) =>
            {
                var ext = node.System.InitSchedulingExtension(quartzConfig,
                                                              node.Log,
                                                              node.Transport,
                                                              node);

                node.DomainConfigurations.Add(new FutureAggregateHandlersDomainConfiguration(ext.SchedulingActor, node.Log));
            };
            if (clearScheduledData)
            {
                fixture.OnNodeStartedEvent += (sender, args) => fixture.Node.System.GetExtension <SchedulingExtension>().Scheduler.Clear();
            }

            return(fixture);
        }
Esempio n. 8
0
        public static SchedulingExtension InitSchedulingExtension(this ActorSystem system,
                                                                  IQuartzConfig quartzConfig,
                                                                  ILogger logger,
                                                                  IPublisher publisher,
                                                                  ICommandExecutor executor)
        {
            if (system == null)
            {
                throw new ArgumentNullException(nameof(system));
            }

            var ext = (SchedulingExtension)system.RegisterExtension(SchedulingExtensionProvider.Provider);
            var schedulingContainer = new ContainerBuilder();

            new SchedulingConfiguration(quartzConfig, logger, publisher, executor).Register(schedulingContainer);
            var container = schedulingContainer.Build();

            ext.Scheduler       = container.Resolve <IScheduler>();
            ext.SchedulingActor = system.ActorOf(Props.Create(() => new SchedulingActor()), nameof(SchedulingActor));

            system.RegisterOnTermination(() =>
            {
                try
                {
                    if (ext.Scheduler != null && ext.Scheduler.IsShutdown == false)
                    {
                        ext.Scheduler.Shutdown(false);
                    }
                }
                catch (Exception ex)
                {
                    system.Log.Warning($"Got error on quartz scheduler shutdown:{ex}");
                }
            });
            return(ext);
        }
Esempio n. 9
0
 public BalanceFixture(ITestOutputHelper output, IQuartzConfig config = null) : base(output)
 {
     BalanceDomainDonfiguration = new BalanceDomainDonfiguration();
     this.EnableScheduling(config ?? new InMemoryQuartzConfig(new InMemoryRetrySettings(1, null, new NeverRetryExceptionPolicy())));
     Add(BalanceDomainDonfiguration);
 }
Esempio n. 10
0
 public BalloonFixture(ITestOutputHelper output, IQuartzConfig config = null) : base(output)
 {
     this.EnableScheduling(config);
     _balloonDomainConfiguration = new BalloonDomainConfiguration();
     Add(_balloonDomainConfiguration);
 }
 public QuartzSchedulerConfiguration(IQuartzConfig quartzConfig)
 {
     _quartzConfig = quartzConfig;
 }
 public FutureEventsFixture(ITestOutputHelper output, IQuartzConfig config, bool clearScheduledData = true) : base(output)
 {
     Add(new FutureAggregateDomainConfiguration());
     this.EnableScheduling(config, clearScheduledData);
 }