private void AsyncProcessEvent <TEvent>(TEvent @event, IEventSubscriber <TEvent> _h) where TEvent : IEvent { var _retry = _h.Strategy.Retry; var _fail = false; do { try { _fail = false; if (_h.Strategy.TimeOut.HasValue) { Task.Factory.StartNew(() => _h.Handle(@event)).WithTimeout(_h.Strategy.TimeOut.Value); } else { Task.Factory.StartNew(() => _h.Handle(@event)); } } catch (AggregateException ex) { _fail = true; ex.Handle(e => { _h.Error(ex); return(true); }); } }while (Interlocked.Decrement(ref _retry) > 0 && _fail == true); if (_fail && _h.Strategy.PersistentStore.HasValue && _h.Strategy.PersistentStore.Value) { //TODO:持久化存储,处理失败的事件 } }
public void Handle(TEvent @event) { _innerSubscriber.Handle(@event); _logger.Info($">> {nameof(OutboxMessage)} table:"); foreach (var message in _dbContext.Set <OutboxMessage>()) { _logger.Info($" > {message.ToJson()}"); } _logger.Info($">> {nameof(OngoingMessage)} table:"); foreach (var message in _dbContext.Set <OngoingMessage>()) { _logger.Info($" > {message.ToJson()}"); } _logger.Info($">> {nameof(FaultMessage)} table:"); foreach (var message in _dbContext.Set <FaultMessage>()) { _logger.Info($" > {message.ToJson()}"); } _logger.Info($">> {nameof(SentMessage)} table:"); foreach (var message in _dbContext.Set <SentMessage>()) { _logger.Info($" > {message.ToJson()}"); } _logger.Info($">> {nameof(SuspiciousMessage)} table:"); foreach (var message in _dbContext.Set <SuspiciousMessage>()) { _logger.Info($" > {message.ToJson()}"); } }
private void SyncProcessEvent <TEvent>(TEvent @event, IEventSubscriber <TEvent> _h) where TEvent : IEvent { var _retry = _h.Strategy.Retry; var _fail = false; do { try { _fail = false; _h.Handle(@event); } catch (Exception ex) { _fail = true; _h.Error(ex); } }while (Interlocked.Decrement(ref _retry) > 0 && _fail == true); if (_fail && _h.Strategy.PersistentStore.HasValue && _h.Strategy.PersistentStore.Value) { //TODO:持久化存储,处理失败的事件 } }
public void Handle(TBase data) { inner.Handle((TDerived)data); }
public void Handle(TEvent @event) { _logger.Info($"{typeof (TEvent).Name} ====> {_innerSubscriber.GetType().Name}: {@event.ToJson()}"); _innerSubscriber.Handle(@event); }