Exemple #1
0
        void ApplyDeliveryConstraints(BrokeredMessage brokeredMessage, BatchedOperationInternal operation)
        {
            DateTime?scheduledEnqueueTime = null;

            var deliveryConstraint = operation.DeliveryConstraints.OfType <DelayedDeliveryConstraint>().FirstOrDefault();

            if (deliveryConstraint != null)
            {
                if (deliveryConstraint is DelayDeliveryWith delay)
                {
                    scheduledEnqueueTime = Time.UtcNow() + delay.Delay;
                }
                else
                {
                    if (deliveryConstraint is DoNotDeliverBefore exact)
                    {
                        scheduledEnqueueTime = exact.At;
                    }
                }
            }

            if (scheduledEnqueueTime.HasValue)
            {
                brokeredMessage.ScheduledEnqueueTimeUtc = scheduledEnqueueTime.Value;
            }

            var timeToBeReceivedConstraint = operation.DeliveryConstraints.OfType <DiscardIfNotReceivedBefore>().FirstOrDefault();

            if (timeToBeReceivedConstraint != null)
            {
                brokeredMessage.TimeToLive = timeToBeReceivedConstraint.MaxTime;
            }
        }
Exemple #2
0
        internal BrokeredMessage Convert(BatchedOperationInternal outgoingOperation, RoutingOptionsInternal routingOptions)
        {
            var outgoingMessage = outgoingOperation.Message;
            var brokeredMessage = CreateBrokeredMessage(outgoingMessage);

            brokeredMessage.MessageId = Guid.NewGuid().ToString();

            ApplyDeliveryConstraints(brokeredMessage, outgoingOperation);

            ApplyCorrelationId(outgoingMessage, brokeredMessage);

            SetReplyToAddress(outgoingMessage, brokeredMessage, routingOptions.DestinationNamespace);

            SetViaPartitionKeyToIncomingBrokeredMessagePartitionKey(brokeredMessage, routingOptions);

            SetEstimatedMessageSizeHeader(brokeredMessage, outgoingOperation.GetEstimatedSize());

            CopyHeaders(outgoingMessage, brokeredMessage);

            return(brokeredMessage);
        }