void ApplyDeliveryConstraints(BrokeredMessage brokeredMessage, BatchedOperation operation) { DateTime?scheduledEnqueueTime = null; var deliveryConstraint = operation.DeliveryConstraints.FirstOrDefault(d => d is DelayedDeliveryConstraint); if (deliveryConstraint != null) { var delay = deliveryConstraint as DelayDeliveryWith; if (delay != null) { scheduledEnqueueTime = Time.UtcNow() + delay.Delay; } else { var exact = deliveryConstraint as DoNotDeliverBefore; if (exact != null) { scheduledEnqueueTime = exact.At; } } } if (scheduledEnqueueTime.HasValue) { brokeredMessage.ScheduledEnqueueTimeUtc = scheduledEnqueueTime.Value; } var timeToBeReceivedConstraint = operation.DeliveryConstraints.FirstOrDefault(d => d is DiscardIfNotReceivedBefore) as DiscardIfNotReceivedBefore; if (timeToBeReceivedConstraint != null) { brokeredMessage.TimeToLive = timeToBeReceivedConstraint.MaxTime; } }
internal BrokeredMessage Convert(BatchedOperation outgoingOperation, RoutingOptions 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); }