Ejemplo n.º 1
0
        public static Configuration UseSqlStorageForScheduledCommands(
            this Configuration configuration)
        {
            configuration.IsUsingInMemoryCommandScheduling(false);

            var container = configuration.Container;

            container.RegisterDefaultClockName()
            .Register <ISchedulerClockRepository>(
                c => c.Resolve <SchedulerClockRepository>())
            .Register <IETagChecker>(
                c => c.Resolve <SqlEventStoreEventStoreETagChecker>())
            .Register <ISchedulerClockTrigger>(
                c => c.Resolve <SchedulerClockTrigger>());

            configuration.Container
            .Resolve <SqlCommandSchedulerPipelineInitializer>()
            .Initialize(configuration);

            var commandSchedulerResolver = new CommandSchedulerResolver(container);

            container
            .Register(
                c => new SchedulerClockTrigger(
                    c.Resolve <CommandSchedulerDbContext>,
                    async(serializedCommand, result, db) =>
            {
                await DeserializeAndDeliver(commandSchedulerResolver, serializedCommand, db);

                result.Add(serializedCommand.Result);
            }))
            .Register <ISchedulerClockTrigger>(c => c.Resolve <SchedulerClockTrigger>());

            return(configuration);
        }
Ejemplo n.º 2
0
        private static async Task DeserializeAndDeliver(
            CommandSchedulerResolver schedulerResolver,
            ScheduledCommand serializedCommand,
            CommandSchedulerDbContext db)
        {
            dynamic scheduler = schedulerResolver.ResolveSchedulerForAggregateTypeNamed(serializedCommand.AggregateType);

            await Storage.DeserializeAndDeliverScheduledCommand(
                serializedCommand,
                scheduler);

            serializedCommand.Attempts++;

            await db.SaveChangesAsync();
        }