Esempio n. 1
0
        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:持久化存储,处理失败的事件
            }
        }
Esempio n. 2
0
        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()}");
            }
        }
Esempio n. 3
0
        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);
        }