public Task <BrokeredMessage> Create(object serializableObject = null) { return(Task.Run(async() => { BrokeredMessage brokeredMessage; if (serializableObject == null) { brokeredMessage = new BrokeredMessage(); } else { var messageBodyBytes = BuildBodyBytes(serializableObject); if (messageBodyBytes.Length > _maxLargeMessageSize) { var errorMessage = "Message body size of {0} is larger than the permitted maximum of {1}. You need to change this in your bus configuration settings if you want to send messages this large." .FormatWith(messageBodyBytes.Length, _maxLargeMessageSize.Value); throw new BusException(errorMessage); } if (messageBodyBytes.Length > _maxSmallMessageSize) { brokeredMessage = new BrokeredMessage(); var expiresAfter = _clock.UtcNow.AddSafely(_timeToLive.Value); var blobIdentifier = await _largeMessageBodyStore.Store(brokeredMessage.MessageId, messageBodyBytes, expiresAfter); brokeredMessage.Properties[MessagePropertyKeys.LargeBodyBlobIdentifier] = blobIdentifier; } else { brokeredMessage = new BrokeredMessage(new MemoryStream(messageBodyBytes), true); } brokeredMessage.Properties[MessagePropertyKeys.MessageType] = serializableObject.GetType().FullName; } var currentDispatchContext = _dispatchContextManager.GetCurrentDispatchContext(); brokeredMessage.Properties[MessagePropertyKeys.PrecedingMessageId] = currentDispatchContext.ResultOfMessageId; brokeredMessage.CorrelationId = currentDispatchContext.CorrelationId ?? brokeredMessage.MessageId; brokeredMessage.ReplyTo = _replyQueueName; return brokeredMessage; })); }
public Task <BrokeredMessage> BuildBrokeredMessage(NimbusMessage message) { return(Task.Run(async() => { BrokeredMessage brokeredMessage; var messageBodyBytes = SerializeNimbusMessage(message); if (messageBodyBytes.Length > _maxLargeMessageSize) { var errorMessage = "Message body size of {0} is larger than the permitted maximum of {1}. You need to change this in your bus configuration settings if you want to send messages this large." .FormatWith(messageBodyBytes.Length, _maxLargeMessageSize.Value); throw new BusException(errorMessage); } if (messageBodyBytes.Length > _maxSmallMessageSize) { brokeredMessage = new BrokeredMessage(); var expiresAfter = message.ExpiresAfter; var blobIdentifier = await _largeMessageBodyStore.Store(message.MessageId, messageBodyBytes, expiresAfter); brokeredMessage.Properties[MessagePropertyKeys.LargeBodyBlobIdentifier] = blobIdentifier; } else { brokeredMessage = new BrokeredMessage(messageBodyBytes); } var currentDispatchContext = _dispatchContextManager.GetCurrentDispatchContext(); brokeredMessage.MessageId = message.MessageId.ToString(); brokeredMessage.CorrelationId = currentDispatchContext.CorrelationId.ToString(); brokeredMessage.ReplyTo = message.From; brokeredMessage.TimeToLive = message.ExpiresAfter.Subtract(DateTimeOffset.UtcNow); brokeredMessage.ScheduledEnqueueTimeUtc = message.DeliverAfter.UtcDateTime; foreach (var property in message.Properties) { brokeredMessage.Properties[property.Key] = property.Value; } return brokeredMessage; })); }