public void Should_reset_once_the_message_was_received() { const int retryLimit = 5; var tracker = new MessageRetryTracker(retryLimit); const string id = "qelofjsw"; Assert.IsFalse(tracker.IsRetryLimitExceeded(id)); tracker.IncrementRetryCount(id); tracker.MessageWasReceivedSuccessfully(id); for (int i = 0; i < retryLimit; i++) { Assert.IsFalse(tracker.IsRetryLimitExceeded(id)); tracker.IncrementRetryCount(id); } Assert.IsTrue(tracker.IsRetryLimitExceeded(id)); }
public void IsLimitExceeded_return_false_untill_specified_limit_reached() { const int retryLimit = 5; var tracker = new MessageRetryTracker(retryLimit); const string id = "qelofjsw"; for (int i = 0; i < retryLimit; i++) { Assert.IsFalse(tracker.IsRetryLimitExceeded(id)); tracker.IncrementRetryCount(id); } Assert.IsTrue(tracker.IsRetryLimitExceeded(id)); }
public void Should_return_false_until_the_limit_is_exceeded() { const int retryLimit = 5; var tracker = new MessageRetryTracker(retryLimit); const string id = "qelofjsw"; Exception ex; for (int i = 0; i < retryLimit; i++) { Assert.IsFalse(tracker.IsRetryLimitExceeded(id, out ex)); tracker.IncrementRetryCount(id, ex); } Assert.IsTrue(tracker.IsRetryLimitExceeded(id, out ex)); }
private Func <Message, Action <Message> > ReceiveFromTransport(Func <object, Action <object> > receiver) { return(message => { if (_tracker.IsRetryLimitExceeded(message.Id)) { if (_log.IsErrorEnabled) { _log.ErrorFormat("Message retry limit exceeded {0}:{1}", Address, message.Id); } return MoveMessageToErrorTransport; } object messageObj; try { messageObj = Serializer.Deserialize(message.BodyStream); } catch (SerializationException sex) { if (_log.IsErrorEnabled) { _log.Error("Unrecognized message " + Address + ":" + message.Id, sex); } _tracker.IncrementRetryCount(message.Id); return MoveMessageToErrorTransport; } if (messageObj == null) { return null; } Action <object> receive; try { receive = receiver(messageObj); if (receive == null) { if (_log.IsDebugEnabled) { _log.DebugFormat("SKIP:{0}:{1}", Address, messageObj.GetType().Name); } if (SpecialLoggers.Messages.IsInfoEnabled) { SpecialLoggers.Messages.InfoFormat("SKIP:{0}:{1}", Address, messageObj.GetType().Name); } return null; } } catch (Exception ex) { if (_log.IsErrorEnabled) { _log.Error("An exception was thrown preparing the message consumers", ex); } _tracker.IncrementRetryCount(message.Id); return null; } return m => { if (_log.IsDebugEnabled) { _log.DebugFormat("RECV:{0}:{1}:{2}", Address, m.Id, messageObj.GetType().Name); } if (SpecialLoggers.Messages.IsInfoEnabled) { SpecialLoggers.Messages.InfoFormat("RECV:{0}:{1}:{2}", Address, m.Id, messageObj.GetType().Name); } try { receive(messageObj); _tracker.MessageWasReceivedSuccessfully(message.Id); } catch (Exception ex) { if (_log.IsErrorEnabled) { _log.Error("An exception was thrown by a message consumer", ex); } _tracker.IncrementRetryCount(message.Id); MoveMessageToErrorTransport(m); } }; }); }