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; } }
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); }