/// <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; }
/// <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(); }
/// <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(); }
/// <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) { }