/// <summary>
 /// Initializes a new instance of the <see cref="RecoveryCommandBus"/> class.
 /// </summary>
 /// <param name="serviceLocator">命令提供者</param>
 /// <param name="recoveryStorager">事件存储</param>
 /// <param name="eventStorager">领域事件的保存方案</param>
 /// <param name="commandStorager">命令储存</param>
 public RecoveryCommandBus(IServiceLocator serviceLocator,
                           IEventStorager eventStorager,
                           ICommandStorager commandStorager,
                           IFailRecoveryStorager recoveryStorager)
     : base(serviceLocator)
 {
     this.eventBus        = new RecoveryEventBus(this, serviceLocator, recoveryStorager);
     this.eventStorager   = eventStorager ?? EmptyEventStreamStorager.Empty;
     this.commandStorager = commandStorager ?? EmptyCommandStreamStorager.Empty;
 }
Beispiel #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RecoveryEventBus"/> class.
 /// </summary>
 /// <param name="commandBus"></param>
 /// <param name="serviceLocator"></param>
 /// <param name="recoveryStorager">The recovery storage.</param>
 public RecoveryEventBus(RecoveryCommandBus commandBus,
                         IServiceLocator serviceLocator,
                         IFailRecoveryStorager recoveryStorager) : base(commandBus, serviceLocator)
 {
     this.commandBus       = commandBus;
     this.serviceLocator   = serviceLocator;
     this.recoveryStorager = recoveryStorager;
     this.commandRecovery  = new CommandRecoveryManager(recoveryStorager, serviceLocator, commandBus, this);
     this.eventRecovery    = new EventRecoveryManager(recoveryStorager, serviceLocator, commandBus, this);
     this.commandRecovery.Start();
     this.eventRecovery.Start();
 }
Beispiel #3
0
        /// <summary>
        /// dozeTime = TimeSpan.FromMinutes(1)表示1秒发一个命令,如果还有命令,则一直发(间隔为1秒),此时RepeatWork返回false
        /// waitTime = TimeSpan.Zero 当任务完成,则进入睡眠状态,直到被唤醒,此时RepeatWork返回true
        /// </summary>
        /// <param name="storager"></param>
        /// <param name="eventBus"></param>
        /// <param name="commandBus"></param>
        /// <param name="serviceLocator"></param>
        /// <param name="loggerBuilder"></param>
        protected EventRecoveryManager(IFailRecoveryStorager storager, IServiceLocator serviceLocator, ICommandBus commandBus, IEventBus eventBus, ILoggerBuilder loggerBuilder) : base(null, typeof(EventRecoveryManager).Name)
        {
            this.storager       = storager;
            this.serviceLocator = serviceLocator;
            this.eventBus       = eventBus;
            this.commandBus     = commandBus;
            if (storager is IWorkTigger && ((IWorkTigger)storager).Timer != TimeSpan.Zero)
            {
                this.sleepTimeSpan = ((IWorkTigger)storager).Timer;
            }

            if (this.sleepTimeSpan == TimeSpan.Zero)
            {
                this.sleepTimeSpan = TimeSpan.FromSeconds(10);
            }

            this.Replace(Change).Start();
        }
Beispiel #4
0
 /// <summary>
 /// dozeTime = TimeSpan.FromMinutes(1)表示1分发一个命令,如果还有命令,则一直发(间隔为1秒),此时RepeatWork返回false
 /// waitTime = TimeSpan.Zero 当任务完成,则进入睡眠状态,直到被唤醒,此时RepeatWork返回true
 /// </summary>
 /// <param name="storager"></param>
 /// <param name="commandBus"></param>
 /// <param name="eventBus"></param>
 /// <param name="serviceLocator"></param>
 public CommandRecoveryManager(IFailRecoveryStorager storager, IServiceLocator serviceLocator, ICommandBus commandBus, IEventBus eventBus)
     : this(storager, serviceLocator, commandBus, eventBus, null)
 {
 }