Example #1
0
 public CompensableAttribute(string compensationMethod, int retryDelayInMilliseconds = 0, int timeout = 0, int retries = 0)
 {
     _omegaContext           = (OmegaContext)ServiceLocator.Current.GetInstance(typeof(OmegaContext));
     _compensableInterceptor = (IEventAwareInterceptor)ServiceLocator.Current.GetInstance(typeof(IEventAwareInterceptor));
     _recoveryPolicy         = (IRecoveryPolicy)ServiceLocator.Current.GetInstance(typeof(IRecoveryPolicy));
     _compensationContext    =
         (CompensationContext)ServiceLocator.Current.GetInstance(typeof(CompensationContext));
     _messageFormat           = (IMessageSerializer)ServiceLocator.Current.GetInstance(typeof(IMessageSerializer));
     Retries                  = retries;
     CompensationMethod       = compensationMethod;
     RetryDelayInMilliseconds = retryDelayInMilliseconds;
     Timeout                  = timeout;
     _parenttxId              = _omegaContext.GetGlobalTxId();
 }
Example #2
0
 private AsyncRetryPolicy<IConnection> CreateConnectionRetryPolicy(IRecoveryPolicy recoveryPolicy)
 {
     return Policy<IConnection>
            .Handle<Exception>()
            .WaitAndRetryAsync(recoveryPolicy.RetryCount, (retryAttempt, context) =>
            {
                context.SetRetryCount(retryAttempt);
                return recoveryPolicy.GetDelay(retryAttempt);
            }, (result, _, context) =>
            {
                var retryCount = context.GetRetryCount();
                var endpoint = GetCurrentEndpoint(context);
                if (result.Exception != null)
                {
                    Log.FailedToEstablishConnection(_logger, endpoint, retryCount, result.Exception);
                }
                else
                {
                    Log.ConnectionEstablished(_logger, endpoint, retryCount);
                }
            });
 }
Example #3
0
        public AutoRecoveringConnection(ILoggerFactory loggerFactory, IEnumerable<Endpoint> endpoints, IRecoveryPolicy recoveryPolicy, Func<IMessageIdPolicy> messageIdPolicyFactory)
        {
            _logger = loggerFactory.CreateLogger<AutoRecoveringConnection>();
            _loggerFactory = loggerFactory;
            _messageIdPolicyFactory = messageIdPolicyFactory;
            _endpoints = endpoints.ToArray();

            var channel = Channel.CreateUnbounded<ConnectCommand>();
            _reader = channel.Reader;
            _writer = channel.Writer;

            _connectionRetryPolicy = CreateConnectionRetryPolicy(recoveryPolicy);

            _recoveryLoopTask = StartRecoveryLoop();
        }
 public static double[] GetDelays(IRecoveryPolicy recoveryPolicy)
 {
     return(Enumerable.Range(1, 5).Select(x => recoveryPolicy.GetDelay(x).TotalMilliseconds).ToArray());
 }