示例#1
0
        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;
            }));
        }
示例#2
0
        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;
            }));
        }