private void SendRetry(Route route, MessageContext context, IRetryPolicy policy) { var options = new Options() { EndPointName = route.OnRetryEndPoint, Headers = context.Headers, Identity = context.Identity, Version = context.Version, ScheduledEnqueueDateTimeUtc = DateTime.UtcNow.Add(policy.NextRetryInterval(context.RetryCount + 1)), RetryCount = context.RetryCount + 1, SagaContext = context.SagaContext, }; var adapter = _factory.Create <IMessageAdapter>(_configuration.MessageAdapterType); var content = adapter.Deserialize(context.Content, context.ContentType); _bus.Send(content, context.Origin, options); }
public void Execute(MessageContext context, Action next, MiddlewareParameter parameter) { IRetryPolicy policy = null; try { if (HasRetry(parameter.Route)) { policy = GetRetryPolicy(parameter.Route); if (policy != null) { var interval = policy.NextRetryInterval(context.RetryCount + 1); context.LastRetry = !policy.CanRetry(context.RetryCount + 1, interval); } else { Console.WriteLine("The retry policy cannot be null"); throw new ApplicationException("The retry policy cannot be null"); } } next(); } catch (Exception ex) { if (policy != null) { if (parameter.Route.RetryExceptionType == ex.GetType()) { if (!context.LastRetry) { if (!string.IsNullOrWhiteSpace(parameter.Route.OnRetryEndPoint)) { SendRetry(parameter.Route, context, policy); } else { if (!string.IsNullOrWhiteSpace(parameter.Route.OnErrorEndPoint)) { SendError(parameter.Route, context, ex); } else { throw; } } } else { if (!string.IsNullOrWhiteSpace(parameter.Route.OnErrorEndPoint)) { SendError(parameter.Route, context, ex); } else { throw; } } } else { if (!string.IsNullOrWhiteSpace(parameter.Route.OnErrorEndPoint)) { SendError(parameter.Route, context, ex); } else { throw; } } } else { if (!string.IsNullOrWhiteSpace(parameter.Route.OnErrorEndPoint)) { SendError(parameter.Route, context, ex); } else { throw; } } } }
public void Execute(MessageContext messagecontext, Action <MessageContext, MiddlewareContext> next, MiddlewareContext middlewarecontext) { IRetryPolicy policy = null; try { if (HasRetry(messagecontext.Route)) { policy = GetRetryPolicy(messagecontext.Route); if (policy != null) { var interval = policy.NextRetryInterval(messagecontext.RetryCount + 1); messagecontext.LastRetry = !policy.CanRetry(messagecontext.RetryCount + 1, interval); } else { throw new ApplicationException("The retry policy cannot be null"); } } next(messagecontext, middlewarecontext); } catch (Exception ex) { if (policy != null) { if (messagecontext.Route.RetryExceptionType == ex.GetType()) { if (!messagecontext.LastRetry) { if (!string.IsNullOrWhiteSpace(messagecontext.Route.OnRetryEndPoint)) { SendRetry(messagecontext.Route, messagecontext, policy); } else { if (!string.IsNullOrWhiteSpace(messagecontext.Route.OnErrorEndPoint)) { SendError(messagecontext.Route, messagecontext, ex); } else { throw; } } } else { if (!string.IsNullOrWhiteSpace(messagecontext.Route.OnErrorEndPoint)) { SendError(messagecontext.Route, messagecontext, ex); } else { throw; } } } else { if (!string.IsNullOrWhiteSpace(messagecontext.Route.OnErrorEndPoint)) { SendError(messagecontext.Route, messagecontext, ex); } else { throw; } } } else { if (!string.IsNullOrWhiteSpace(messagecontext.Route.OnErrorEndPoint)) { SendError(messagecontext.Route, messagecontext, ex); } else { throw; } } } }