Exemple #1
0
        public void Inject(object handlerOrInterceptor, NimbusMessage nimbusMessage)
        {
            var requireBus = handlerOrInterceptor as IRequireBus;

            if (requireBus != null)
            {
                requireBus.Bus = Bus;
            }

            var requiresBusId = handlerOrInterceptor as IRequireBusId;

            if (requiresBusId != null)
            {
                requiresBusId.BusId = Bus.InstanceId;
            }

            var requireDispatchContext = handlerOrInterceptor as IRequireDispatchContext;

            if (requireDispatchContext != null)
            {
                requireDispatchContext.DispatchContext = _dispatchContextManager.GetCurrentDispatchContext();
            }

            var requireNimbusMessage = handlerOrInterceptor as IRequireNimbusMessage;

            if (requireNimbusMessage != null)
            {
                requireNimbusMessage.NimbusMessage = nimbusMessage;
            }

            var requireDateTime = handlerOrInterceptor as IRequireDateTime;

            if (requireDateTime != null)
            {
                requireDateTime.UtcNow = () => _clock.UtcNow;
            }

            var requireLargeMessageBodyStore = handlerOrInterceptor as IRequireLargeMessageBodyStore;

            if (requireLargeMessageBodyStore != null)
            {
                requireLargeMessageBodyStore.LargeMessageBodyStore = _largeMessageBodyStore;
            }

            var requireMessageProperties = handlerOrInterceptor as IRequireMessageProperties;

            if (requireMessageProperties != null)
            {
                var properties = nimbusMessage.ExtractProperties();
                requireMessageProperties.MessageProperties = properties;
            }
        }
        public Task <NimbusMessage> Create(string destinationPath, [AllowNull] object payload)
        {
            var nimbusMessage          = new NimbusMessage(destinationPath, payload);
            var expiresAfter           = _clock.UtcNow.AddSafely(_timeToLive.Value);
            var currentDispatchContext = _dispatchContextManager.GetCurrentDispatchContext();

            nimbusMessage.PrecedingMessageId = currentDispatchContext.ResultOfMessageId;
            nimbusMessage.CorrelationId      = currentDispatchContext.CorrelationId;
            nimbusMessage.From         = _replyQueueName;
            nimbusMessage.ExpiresAfter = expiresAfter;

            return(Task.FromResult(nimbusMessage));
        }
Exemple #3
0
        public void Inject(object handlerOrInterceptor, BrokeredMessage brokeredMessage)
        {
            var requireBus = handlerOrInterceptor as IRequireBus;

            if (requireBus != null)
            {
                requireBus.Bus = Bus;
            }

            var requireDispatchContext = handlerOrInterceptor as IRequireDispatchContext;

            if (requireDispatchContext != null)
            {
                requireDispatchContext.DispatchContext = _dispatchContextManager.GetCurrentDispatchContext();
            }

            var requireBrokeredMessage = handlerOrInterceptor as IRequireBrokeredMessage;

            if (requireBrokeredMessage != null)
            {
                requireBrokeredMessage.BrokeredMessage = brokeredMessage;
            }

            var requireDateTime = handlerOrInterceptor as IRequireDateTime;

            if (requireDateTime != null)
            {
                requireDateTime.UtcNow = () => _clock.UtcNow;
            }

            var requireLargeMessageBodyStore = handlerOrInterceptor as IRequireLargeMessageBodyStore;

            if (requireLargeMessageBodyStore != null)
            {
                requireLargeMessageBodyStore.LargeMessageBodyStore = _largeMessageBodyStore;
            }

            var requireMessageProperties = handlerOrInterceptor as IRequireMessageProperties;

            if (requireMessageProperties != null)
            {
                var properties = brokeredMessage.ExtractProperties();
                requireMessageProperties.MessageProperties = properties;
            }
        }
Exemple #4
0
        public Task <NimbusMessage> Create(string destinationPath, [AllowNull] object payload)
        {
            var nimbusMessage          = new NimbusMessage(destinationPath, payload);
            var expiresAfter           = _clock.UtcNow.AddSafely(_timeToLive.Value);
            var currentDispatchContext = _dispatchContextManager.GetCurrentDispatchContext();

            nimbusMessage.PrecedingMessageId = currentDispatchContext.ResultOfMessageId;
            nimbusMessage.CorrelationId      = currentDispatchContext.CorrelationId;
            nimbusMessage.From         = _replyQueueName;
            nimbusMessage.ExpiresAfter = expiresAfter;

            payload?.GetType().GetProperties()
            .Where(p => p.HasAttribute <FilterProperty>())
            .Do(p => nimbusMessage.Properties[p.Name] = p.GetValue(payload))
            .Done();

            return(Task.FromResult(nimbusMessage));
        }
        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;
            }));
        }