void Defer(TimeSpan defer, TransportMessage message)
        {
            var retryMessageAt = DateTime.UtcNow + defer;

            TransportMessageHeaderHelper.SetHeader(message, Headers.Retries,
                                                   (TransportMessageHeaderHelper.GetNumberOfRetries(message) + 1).ToString(CultureInfo.InvariantCulture));

            var addressOfFaultingEndpoint = TransportMessageHeaderHelper.GetAddressOfFaultingEndpoint(message);

            if (!TransportMessageHeaderHelper.HeaderExists(message, SecondLevelRetriesHeaders.RetriesTimestamp))
            {
                TransportMessageHeaderHelper.SetHeader(message, SecondLevelRetriesHeaders.RetriesTimestamp,
                                                       DateTimeExtensions.ToWireFormattedString(DateTime.UtcNow));
            }

            logger.DebugFormat("Defer message and send it to {0}", addressOfFaultingEndpoint);

            var sendOptions = new SendOptions(addressOfFaultingEndpoint)
            {
                DeliverAt = retryMessageAt
            };


            MessageDeferrer.Defer(message, sendOptions);
        }
示例#2
0
        public void ClearTimeoutsFor(Guid sagaId)
        {
            if (sagaId == Guid.Empty)
            {
                throw new ArgumentException("Invalid saga id.", "sagaId");
            }

            MessageDeferrer.ClearDeferredMessages(Headers.SagaId, sagaId.ToString());
        }
        void Defer(TimeSpan defer, TransportMessage message)
        {
            var retryMessageAt = DateTime.UtcNow + defer;

            TransportMessageHelpers.SetHeader(message, Headers.Retries, (TransportMessageHelpers.GetNumberOfRetries(message) + 1).ToString());

            var addressOfFaultingEndpoint = TransportMessageHelpers.GetAddressOfFaultingEndpoint(message);

            if (!TransportMessageHelpers.HeaderExists(message, SecondLevelRetriesHeaders.RetriesTimestamp))
            {
                TransportMessageHelpers.SetHeader(message, SecondLevelRetriesHeaders.RetriesTimestamp, DateTimeExtensions.ToWireFormattedString(DateTime.UtcNow));
            }

            Logger.DebugFormat("Defer message and send it to {0}", addressOfFaultingEndpoint);

            MessageDeferrer.Defer(message, retryMessageAt, addressOfFaultingEndpoint);
        }
示例#4
0
        public ICallback Defer(DateTime processAt, params object[] messages)
        {
            if (messages == null || messages.Length == 0)
            {
                throw new InvalidOperationException("Cannot Defer an empty set of messages.");
            }
            if (processAt.ToUniversalTime() <= DateTime.UtcNow)
            {
                return(SendLocal(messages));
            }

            var toSend = new TransportMessage();

            MapTransportMessageFor(messages, toSend);

            toSend.Headers[Headers.IsDeferredMessage] = Boolean.TrueString;

            MessageDeferrer.Defer(toSend, processAt, Address.Local);

            return(SetupCallback(toSend.Id));
        }
 void NotifyTimeoutManagerThatSagaHasCompleted(ISaga saga)
 {
     MessageDeferrer.ClearDeferredMessages(Headers.SagaId, saga.Entity.Id.ToString());
 }