public virtual void Fail(SignalDispatch <TKey> dispatch, DispatcherAvailability availability)
        {
            if (availability == DispatcherAvailability.Available)
            {
                return;
            }

            _failedAttemptsCount++;
            SetTimeoutEndUtc();
        }
Esempio n. 2
0
        public virtual void CountAvailabilityCheck(DispatcherAvailability availability)
        {
            if (availability == DispatcherAvailability.NotChecked)
            {
                return;
            }

            //count check as additional message dispatched
            AvailableLimitCapacity--;
            LimitCounter.InsertTime();
        }
Esempio n. 3
0
 //limitation methods
 public virtual void CountSendAttempt(SignalDispatch <TKey> dispatch,
                                      ProcessingResult result, DispatcherAvailability availability)
 {
     if (result == ProcessingResult.Success)
     {
         AvailableLimitCapacity--;
         LimitCounter.InsertTime();
         Interrupter.Success(dispatch);
     }
     else if (result == ProcessingResult.Fail)
     {
         AvailableLimitCapacity--;
         LimitCounter.InsertTime();
         Interrupter.Fail(dispatch, availability);
     }
 }
Esempio n. 4
0
        //methods
        public virtual bool Execute(SignalWrapper <SignalDispatch <TKey> > item)
        {
            //find Dispatcher by deliveryType
            IDispatchChannel <TKey> channel = _channelRegistry.Match(item.Signal);

            if (channel == null)
            {
                _dispatchQueue.ApplyResult(item, ProcessingResult.NoHandlerFound);
                return(false);
            }

            //send with dispatcher
            ProcessingResult sendResult = ProcessingResult.Fail;
            Stopwatch        sendTimer  = Stopwatch.StartNew();

            try
            {
                sendResult = channel.Send(item.Signal);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, null);
            }
            sendTimer.Stop();

            //check dispatcher availability
            DispatcherAvailability availability = CheckAvailability(channel, sendResult);

            if (sendResult == ProcessingResult.Fail && availability == DispatcherAvailability.NotAvailable)
            {
                sendResult = ProcessingResult.Repeat;
            }

            _monitor.DispatchSent(item.Signal, sendResult, sendTimer.Elapsed);
            channel.CountSendAttempt(item.Signal, sendResult, availability);
            _dispatchQueue.ApplyResult(item, sendResult);
            return(sendResult == ProcessingResult.Success);
        }
 public virtual void Fail(SignalDispatch <TKey> dispatch, DispatcherAvailability availability)
 {
 }
 public void DispatchChannelAvailabilityChecked(IDispatchChannel <TKey> channel, DispatcherAvailability availability)
 {
     Console.WriteLine(MonitorMessages.ChannelAvailabilityChecked,
                       DateTime.Now.ToLongTimeString(), channel.DeliveryType, availability);
 }
        public void DispatchChannelAvailabilityChecked(IDispatchChannel <TKey> channel, DispatcherAvailability availability)
        {
            string message = string.Format(MonitorMessages.ChannelAvailabilityChecked,
                                           DateTime.Now.ToLongTimeString(), channel.DeliveryType, availability);

            Trace.WriteLine(message);
        }