public virtual void Fail(SignalDispatch <TKey> dispatch, DispatcherAvailability availability) { if (availability == DispatcherAvailability.Available) { return; } _failedAttemptsCount++; SetTimeoutEndUtc(); }
public virtual void CountAvailabilityCheck(DispatcherAvailability availability) { if (availability == DispatcherAvailability.NotChecked) { return; } //count check as additional message dispatched AvailableLimitCapacity--; LimitCounter.InsertTime(); }
//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); } }
//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); }