Beispiel #1
0
        protected AbstractMessageBuilder(object payload, IMessage originalMessage)
        {
            if (payload == null)
            {
                throw new ArgumentNullException(nameof(payload));
            }

            _payload         = payload;
            _originalMessage = originalMessage;
            _headerAccessor  = new IntegrationMessageHeaderAccessor(originalMessage);
            if (originalMessage != null)
            {
                _modified = !_payload.Equals(originalMessage.Payload);
            }
        }
Beispiel #2
0
        public async Task TestCorrelationNotCopiedFromRequestMessgeIdIfAlreadySetByHandler()
        {
            IMessage message          = Message.Create("test");
            var      inputChannel     = new DirectChannel(provider.GetService <IApplicationContext>());
            var      outputChannel    = new QueueChannel(provider.GetService <IApplicationContext>(), 1);
            var      serviceActivator = new ServiceActivatingHandler(provider.GetService <IApplicationContext>(), new TestBeanCreateMessage());

            serviceActivator.OutputChannel = outputChannel;
            var endpoint = new EventDrivenConsumerEndpoint(provider.GetService <IApplicationContext>(), inputChannel, serviceActivator);
            await endpoint.Start();

            Assert.True(inputChannel.Send(message));
            var reply    = outputChannel.Receive(0);
            var accessor = new IntegrationMessageHeaderAccessor(reply);

            Assert.Equal("456-XYZ", accessor.GetCorrelationId());
        }
Beispiel #3
0
        public async Task TestCorrelationNotPassedFromRequestHeaderIfAlreadySetByHandler()
        {
            object correlationId    = "123-ABC";
            var    message          = Support.IntegrationMessageBuilder.WithPayload("test").SetCorrelationId(correlationId).Build();
            var    inputChannel     = new DirectChannel(provider.GetService <IApplicationContext>());
            var    outputChannel    = new QueueChannel(provider.GetService <IApplicationContext>(), 1);
            var    serviceActivator = new ServiceActivatingHandler(provider.GetService <IApplicationContext>(), new TestBeanCreateMessage());

            serviceActivator.OutputChannel = outputChannel;
            var endpoint = new EventDrivenConsumerEndpoint(provider.GetService <IApplicationContext>(), inputChannel, serviceActivator);
            await endpoint.Start();

            Assert.True(inputChannel.Send(message));
            var reply    = outputChannel.Receive(0);
            var accessor = new IntegrationMessageHeaderAccessor(reply);

            Assert.Equal("456-XYZ", accessor.GetCorrelationId());
        }
Beispiel #4
0
        public async Task TestCorrelationIdPassedIfAvailable()
        {
            object correlationId    = "123-ABC";
            var    message          = Support.MessageBuilder.WithPayload("test").SetCorrelationId(correlationId).Build();
            var    inputChannel     = new DirectChannel(provider);
            var    outputChannel    = new QueueChannel(provider, 1);
            var    serviceActivator = new ServiceActivatingHandler(provider, new TestBeanUpperCase());

            serviceActivator.OutputChannel = outputChannel;
            var endpoint = new EventDrivenConsumerEndpoint(provider, inputChannel, serviceActivator);
            await endpoint.Start();

            Assert.True(inputChannel.Send(message));
            var reply    = outputChannel.Receive(0);
            var accessor = new IntegrationMessageHeaderAccessor(reply);

            Assert.Equal(correlationId, accessor.GetCorrelationId());
        }
        public void TestPartitionedModuleSpEL()
        {
            var bindingsOptions = new RabbitBindingsOptions();
            var binder          = GetBinder(bindingsOptions);

            var consumerProperties = GetConsumerOptions("input", bindingsOptions);

            consumerProperties.Concurrency   = 2;
            consumerProperties.InstanceIndex = 0;
            consumerProperties.InstanceCount = 3;
            consumerProperties.Partitioned   = true;

            var delimiter = GetDestinationNameDelimiter();
            var input0    = new QueueChannel
            {
                ComponentName = "test.input0S"
            };

            var input0Binding = binder.BindConsumer($"part{delimiter}0", "testPartitionedModuleSpEL", input0, consumerProperties);

            consumerProperties.InstanceIndex = 1;
            var input1 = new QueueChannel();

            input1.ComponentName = "test.input1S";
            var input1Binding = binder.BindConsumer($"part{delimiter}0", "testPartitionedModuleSpEL", input1, consumerProperties);

            consumerProperties.InstanceIndex = 2;
            var input2 = new QueueChannel();

            input2.ComponentName = "test.input2S";
            var input2Binding = binder.BindConsumer($"part{delimiter}0", "testPartitionedModuleSpEL", input2, consumerProperties);

            var producerProperties    = GetProducerOptions("output", bindingsOptions);
            var rabbitProducerOptions = bindingsOptions.GetRabbitProducerOptions("output");

            rabbitProducerOptions.RoutingKeyExpression     = "'part.0'";
            producerProperties.PartitionKeyExpression      = "Payload";
            producerProperties.PartitionSelectorExpression = "ToString()"; // For strings, Java hash is not equivalent to GetHashCode, but for 0,1,2 ToString() is equivalent to hash.
            producerProperties.PartitionCount = 3;
            var output = CreateBindableChannel("output", CreateProducerBindingOptions(producerProperties));

            output.ComponentName = "test.output";

            var outputBinding = binder.BindProducer($"part{delimiter}0", output, producerProperties);

            try
            {
                var endpoint = ExtractEndpoint(outputBinding);
                CheckRkExpressionForPartitionedModuleSpEL(endpoint);
            }
            catch (Exception ex)
            {
                _logger?.LogError(ex, ex.Message);
            }

            var message2 = MessageBuilder.WithPayload("2").SetHeader("correlationId", "foo").SetHeader("contentType", MimeTypeUtils.TEXT_PLAIN).SetHeader("sequenceNumber", 42).SetHeader("sequenceSize", 43).Build();

            output.Send(message2);
            output.Send(MessageBuilder.WithPayload("1").SetHeader("contentType", MimeTypeUtils.TEXT_PLAIN).Build());
            output.Send(MessageBuilder.WithPayload("0").SetHeader("contentType", MimeTypeUtils.TEXT_PLAIN).Build());

            var receive0 = Receive(input0);

            Assert.NotNull(receive0);

            var receive1 = Receive(input1);

            Assert.NotNull(receive1);

            var receive2 = Receive(input2);

            Assert.NotNull(receive2);

            Func <IMessage, bool> correlationHeadersForPayload2 = (m) =>
            {
                var accessor = new IntegrationMessageHeaderAccessor(m);
                return("foo".Equals(accessor.GetCorrelationId()) && accessor.GetSequenceNumber() == 42 && accessor.GetSequenceSize() == 43);
            };

            if (UsesExplicitRouting())
            {
                Assert.Equal("0", ((byte[])receive0.Payload).GetString());
                Assert.Equal("1", ((byte[])receive1.Payload).GetString());
                Assert.Equal("2", ((byte[])receive2.Payload).GetString());
                Assert.True(correlationHeadersForPayload2(receive2));
            }
            else
            {
                var receivedMessages = new List <IMessage>()
                {
                    receive0, receive1, receive2
                };
                Assert.Contains(receivedMessages, m => ((byte[])m.Payload).ToString() == "0");
                Assert.Contains(receivedMessages, m => ((byte[])m.Payload).ToString() == "1");
                Assert.Contains(receivedMessages, m => ((byte[])m.Payload).ToString() == "2");

                Func <IMessage, bool> payloadIs2 = (m) => m.Payload.Equals("2".GetBytes());
                Assert.Single(receivedMessages.Where(payloadIs2).Where(correlationHeadersForPayload2));
            }

            input0Binding.Unbind();
            input1Binding.Unbind();
            input2Binding.Unbind();
            outputBinding.Unbind();
        }