public void TestOneRequiredGroup()
        {
            var binder                 = GetBinder();
            var bindingsOptions        = new RabbitBindingsOptions();
            var producerOptions        = GetProducerOptions("input", bindingsOptions);
            var producerBindingOptions = CreateProducerBindingOptions(producerOptions);
            var output                 = CreateBindableChannel("output", producerBindingOptions);

            var consumerOptions = GetConsumerOptions("output", bindingsOptions);

            var testDestination = "testDestination" + Guid.NewGuid().ToString().Replace("-", string.Empty);

            producerOptions.RequiredGroups = new List <string>()
            {
                "test1"
            };
            var producerBinding = binder.BindProducer(testDestination, output, producerOptions);
            var testPayload     = "foo-" + Guid.NewGuid().ToString();

            output.Send(MessageBuilder.WithPayload(testPayload).SetHeader("contentType", MimeTypeUtils.TEXT_PLAIN).Build());
            var inbound1         = new QueueChannel();
            var consumerBinding  = binder.BindConsumer(testDestination, "test1", inbound1, consumerOptions);
            var receivedMessage1 = (Message <byte[]>)Receive(inbound1);

            Assert.NotNull(receivedMessage1);
            Assert.Equal(testPayload, Encoding.UTF8.GetString(receivedMessage1.Payload));

            producerBinding.Unbind();
            consumerBinding.Unbind();
        }
        public void TestSendPojoReceivePojoWithStreamListenerDefaultContentType()
        {
            var handler = BuildStreamListener(GetType(), "EchoStation", typeof(Station));
            var binder  = GetBinder();

            var delimiter                 = GetDestinationNameDelimiter();
            var bindingsOptions           = new RabbitBindingsOptions();
            var producerOptions           = GetProducerOptions("input", bindingsOptions);
            var producerBindingProperties = CreateProducerBindingOptions(producerOptions);

            var moduleOutputChannel       = CreateBindableChannel("output", producerBindingProperties);
            var consumerProperties        = GetConsumerOptions("output", bindingsOptions);
            var consumerBindingProperties = CreateConsumerBindingOptions(consumerProperties);

            var moduleInputChannel = CreateBindableChannel("input", consumerBindingProperties);
            var producerBinding    = binder.BindProducer($"bar{delimiter}0a", moduleOutputChannel, producerBindingProperties.Producer);
            var consumerBinding    = binder.BindConsumer($"bar{delimiter}0a", "test-1", moduleInputChannel, consumerBindingProperties.Consumer);

            var station = new Station();
            var message = MessageBuilder.WithPayload(station).Build();

            moduleInputChannel.Subscribe(handler);
            moduleOutputChannel.Send(message);
            var replyChannel = (QueueChannel)handler.OutputChannel;
            var replyMessage = replyChannel.Receive(5000);

            Assert.IsType <Station>(replyMessage.Payload);
            producerBinding.Unbind();
            consumerBinding.Unbind();
        }
        public void TestSendJsonReceiveJsonWithStreamListener()
        {
            var handler = BuildStreamListener(GetType(), "EchoStationString", typeof(string));
            var binder  = GetBinder();

            var delimiter                 = GetDestinationNameDelimiter();
            var bindingsOptions           = new RabbitBindingsOptions();
            var producerOptions           = GetProducerOptions("input", bindingsOptions);
            var producerBindingProperties = CreateProducerBindingOptions(producerOptions);

            var moduleOutputChannel       = CreateBindableChannel("output", producerBindingProperties);
            var consumerProperties        = GetConsumerOptions("output", bindingsOptions);
            var consumerBindingProperties = CreateConsumerBindingOptions(consumerProperties);

            var moduleInputChannel = CreateBindableChannel("input", consumerBindingProperties);
            var producerBinding    = binder.BindProducer($"bad{delimiter}0e", moduleOutputChannel, producerBindingProperties.Producer);
            var consumerBinding    = binder.BindConsumer($"bad{delimiter}0e", "test-5", moduleInputChannel, consumerBindingProperties.Consumer);
            var value   = "{\"readings\":[{\"stationid\":\"fgh\",\"customerid\":\"12345\",\"timestamp\":null},{\"stationid\":\"hjk\",\"customerid\":\"222\",\"timestamp\":null}]}";
            var message = MessageBuilder.WithPayload(value).SetHeader("contentType", MimeTypeUtils.APPLICATION_JSON).Build();

            moduleInputChannel.Subscribe(handler);
            moduleOutputChannel.Send(message);
            var channel = (QueueChannel)handler.OutputChannel;
            var reply   = channel.Receive(5000);

            Assert.NotNull(reply);
            Assert.IsType <string>(reply.Payload);
            producerBinding.Unbind();
            consumerBinding.Unbind();
        }
        public void TestClean()
        {
            var bindingsOptions     = new RabbitBindingsOptions();
            var binder              = GetBinder();
            var delimiter           = GetDestinationNameDelimiter();
            var foo0ProducerBinding = binder.BindProducer($"foo{delimiter}0", CreateBindableChannel("output", GetDefaultBindingOptions()), GetProducerOptions("output", bindingsOptions));
            var foo0ConsumerBinding = binder.BindConsumer($"foo{delimiter}0", "testClean", CreateBindableChannel("input", GetDefaultBindingOptions()), GetConsumerOptions("input", bindingsOptions));

            var foo1ProducerBinding = binder.BindProducer($"foo{delimiter}1", CreateBindableChannel("output", GetDefaultBindingOptions()), GetProducerOptions("output1", bindingsOptions));
            var foo1ConsumerBinding = binder.BindConsumer($"foo{delimiter}1", "testClean", CreateBindableChannel("input", GetDefaultBindingOptions()), GetConsumerOptions("input1", bindingsOptions));

            var foo2ProducerBinding = binder.BindProducer($"foo{delimiter}2", CreateBindableChannel("output", GetDefaultBindingOptions()), GetProducerOptions("output2", bindingsOptions));

            foo0ProducerBinding.Unbind();
            Assert.False(foo0ProducerBinding.IsRunning);

            foo0ConsumerBinding.Unbind();
            foo1ProducerBinding.Unbind();

            Assert.False(foo0ConsumerBinding.IsRunning);
            Assert.False(foo1ProducerBinding.IsRunning);

            foo1ConsumerBinding.Unbind();
            foo2ProducerBinding.Unbind();

            Assert.False(foo1ConsumerBinding.IsRunning);
            Assert.False(foo2ProducerBinding.IsRunning);
        }
Example #5
0
 public RabbitTestBinder(IConnectionFactory connectionFactory, RabbitMessageChannelBinder binder, ILogger <RabbitTestBinder> logger)
 {
     _logger = logger;
     PollableConsumerBinder = binder;
     _rabbitAdmin           = new RabbitAdmin(GetApplicationContext(), connectionFactory, logger);
     BindingsOptions        = binder.BindingsOptions;
 }
Example #6
0
        public RabbitExchangeQueueProvisioner(IConnectionFactory connectionFactory, List <IDeclarableCustomizer> customizers, RabbitBindingsOptions bindingsOptions, IApplicationContext applicationContext, ILogger <RabbitExchangeQueueProvisioner> logger)
        {
            Admin = new RabbitAdmin(applicationContext, connectionFactory, logger);

            var serviceProvider = new ServiceCollection().BuildServiceProvider();

            _autoDeclareContext      = applicationContext;
            _logger                  = logger;
            Admin.ApplicationContext = _autoDeclareContext;
            Admin.Initialize();
            Customizers = customizers;
            Options     = bindingsOptions;
        }
        public void TestSendPojoReceivePojoWithStreamListener()
        {
            var handler = BuildStreamListener(GetType(), "EchoStation", typeof(Station));
            var binder  = GetBinder();

            var delimiter                 = GetDestinationNameDelimiter();
            var bindingsOptions           = new RabbitBindingsOptions();
            var producerOptions           = GetProducerOptions("input", bindingsOptions);
            var producerBindingProperties = CreateProducerBindingOptions(producerOptions);

            var moduleOutputChannel       = CreateBindableChannel("output", producerBindingProperties);
            var consumerProperties        = GetConsumerOptions("output", bindingsOptions);
            var consumerBindingProperties = CreateConsumerBindingOptions(consumerProperties);

            var moduleInputChannel = CreateBindableChannel("input", consumerBindingProperties);
            var producerBinding    = binder.BindProducer($"bad{delimiter}0f", moduleOutputChannel, producerBindingProperties.Producer);
            var consumerBinding    = binder.BindConsumer($"bad{delimiter}0f", "test-6", moduleInputChannel, consumerBindingProperties.Consumer);

            var r1 = new Station.Readings
            {
                CustomerId = "123",
                StationId  = "XYZ"
            };

            var r2 = new Station.Readings
            {
                CustomerId = "546",
                StationId  = "ABC"
            };

            var station = new Station
            {
                ReadingsList = new List <Station.Readings> {
                    r1, r2
                }
            };

            var message = MessageBuilder.WithPayload(station).SetHeader("contentType", MimeTypeUtils.APPLICATION_JSON).Build();

            moduleInputChannel.Subscribe(handler);
            moduleOutputChannel.Send(message);
            var channel = (QueueChannel)handler.OutputChannel;
            var reply   = channel.Receive(5000);

            Assert.NotNull(reply);
            Assert.IsType <Station>(reply.Payload);
            producerBinding.Unbind();
            consumerBinding.Unbind();
        }
        protected ConsumerOptions GetConsumerOptions(string bindingName, RabbitBindingsOptions bindingsOptions, RabbitConsumerOptions rabbitConsumerOptions = null, RabbitBindingOptions bindingOptions = null)
        {
            rabbitConsumerOptions ??= new RabbitConsumerOptions();
            rabbitConsumerOptions.PostProcess();

            bindingOptions ??= new RabbitBindingOptions();
            bindingOptions.Consumer = rabbitConsumerOptions;
            bindingsOptions.Bindings.Add(bindingName, bindingOptions);

            var consumerOptions = new ConsumerOptions()
            {
                BindingName = bindingName
            };

            consumerOptions.PostProcess(bindingName);
            return(consumerOptions);
        }
        public void TestSendAndReceiveNoOriginalContentType()
        {
            var binder = GetBinder();

            var delimiter                 = GetDestinationNameDelimiter();
            var bindingsOptions           = new RabbitBindingsOptions();
            var producerOptions           = GetProducerOptions("input", bindingsOptions);
            var producerBindingProperties = CreateProducerBindingOptions(producerOptions);

            var moduleOutputChannel = CreateBindableChannel("output", producerBindingProperties);

            var consumerProperties     = GetConsumerOptions("output", bindingsOptions);
            var inputBindingProperties = CreateConsumerBindingOptions(consumerProperties);
            var moduleInputChannel     = CreateBindableChannel("input", inputBindingProperties);

            var producerBinding = binder.BindProducer($"bar{delimiter}0", moduleOutputChannel, producerBindingProperties.Producer);
            var consumerBinding = binder.BindConsumer($"bar{delimiter}0", "testSendAndReceiveNoOriginalContentType", moduleInputChannel, consumerProperties);

            BinderBindUnbindLatency();
            var message = MessageBuilder.WithPayload("foo").SetHeader("contentType", MimeTypeUtils.TEXT_PLAIN).Build();

            moduleOutputChannel.Send(message);
            var latch             = new CountdownEvent(1);
            var inboundMessageRef = new AtomicReference <IMessage>();

            moduleInputChannel.Subscribe(new TestMessageHandler()
            {
                OnHandleMessage = (message) =>
                {
                    inboundMessageRef.GetAndSet(message);
                    latch.Signal();
                }
            });

            moduleOutputChannel.Send(message);

            Assert.True(latch.Wait(TimeSpan.FromSeconds(5)), "Failed to receive message");
            Assert.NotNull(inboundMessageRef.Value);
            Assert.Equal("foo", ((byte[])inboundMessageRef.Value.Payload).GetString());
            Assert.Equal("text/plain", inboundMessageRef.Value.Headers.ContentType());

            producerBinding.Unbind();
            consumerBinding.Unbind();
        }
        public RabbitMessageChannelBinder(IApplicationContext context, ILogger <RabbitMessageChannelBinder> logger, SteeltoeConnectionFactory connectionFactory, RabbitOptions rabbitOptions, RabbitBinderOptions binderOptions, RabbitBindingsOptions bindingsOptions, RabbitExchangeQueueProvisioner provisioningProvider, IListenerContainerCustomizer containerCustomizer, IMessageSourceCustomizer sourceCustomizer)
            : base(context, Array.Empty <string>(), provisioningProvider, containerCustomizer, sourceCustomizer, logger)
        {
            if (connectionFactory == null)
            {
                throw new ArgumentNullException(nameof(connectionFactory));
            }

            if (rabbitOptions == null)
            {
                throw new ArgumentNullException(nameof(rabbitOptions));
            }

            _logger                 = logger;
            ConnectionFactory       = connectionFactory;
            RabbitConnectionOptions = rabbitOptions;
            BinderOptions           = binderOptions;
            BindingsOptions         = bindingsOptions;
            ServiceName             = "rabbitBinder";
        }
        public void TestSendAndReceive()
        {
            var ccf             = GetResource();
            var bindingsOptions = new RabbitBindingsOptions();
            var binder          = GetBinder(bindingsOptions);
            var delimiter       = GetDestinationNameDelimiter();

            var producerOptions         = GetProducerOptions("input", bindingsOptions);
            var consumerProperties      = GetConsumerOptions("output", bindingsOptions);
            var outputBindingProperties = CreateProducerBindingOptions(producerOptions);
            var moduleOutputChannel     = CreateBindableChannel("output", GetDefaultBindingOptions());

            var inputBindingProperties = CreateConsumerBindingOptions(consumerProperties);
            var moduleInputChannel     = CreateBindableChannel("input", GetDefaultBindingOptions());

            var producerBinding = binder.BindProducer($"foo{delimiter}0", moduleOutputChannel, producerOptions);
            var consumerBinding = binder.BindConsumer($"foo{delimiter}0", "testSendAndReceive", moduleInputChannel, consumerProperties);
            var message         = MessageBuilder.WithPayload("foo").SetHeader(MessageHeaders.CONTENT_TYPE, MimeType.ToMimeType("text/plain")).Build();

            var latch             = new CountdownEvent(1);
            var inboundMessageRef = new AtomicReference <IMessage>();

            moduleInputChannel.Subscribe(new TestMessageHandler()
            {
                OnHandleMessage = (message) =>
                {
                    inboundMessageRef.GetAndSet(message);
                    latch.Signal();
                }
            });
            moduleOutputChannel.Send(message);

            Assert.True(latch.Wait(TimeSpan.FromSeconds(5)), "Failed to receive message");

            var actual = inboundMessageRef.Value;

            Assert.Equal("foo".GetBytes(), actual.Payload);
            Assert.Equal("text/plain", actual.Headers.ContentType());
            producerBinding.Unbind();
            consumerBinding.Unbind();
        }
        protected ProducerOptions GetProducerOptions(string bindingName, RabbitBindingsOptions bindingsOptions, RabbitBindingOptions bindingOptions = null)
        {
            var rabbitProducerOptions = new RabbitProducerOptions();

            rabbitProducerOptions.PostProcess();

            bindingOptions ??= new RabbitBindingOptions();

            bindingOptions.Producer = rabbitProducerOptions;

            bindingsOptions.Bindings.Add(bindingName, bindingOptions);

            var producerOptions = new ProducerOptions()
            {
                BindingName = bindingName
            };

            producerOptions.PostProcess(bindingName);

            return(producerOptions);
        }
        public void TestSendAndReceiveMultipleTopics()
        {
            var binder = GetBinder();

            var delimiter                 = GetDestinationNameDelimiter();
            var bindingsOptions           = new RabbitBindingsOptions();
            var producerOptions           = GetProducerOptions("input", bindingsOptions);
            var producerBindingProperties = CreateProducerBindingOptions(producerOptions);

            var consumerProperties   = GetConsumerOptions("output", bindingsOptions);
            var moduleOutputChannel1 = CreateBindableChannel("output1", producerBindingProperties);

            var moduleOutputChannel2 = CreateBindableChannel("output2", producerBindingProperties);
            var moduleInputChannel   = new QueueChannel();
            var producerBinding1     = binder.BindProducer($"foo{delimiter}xy", moduleOutputChannel1, producerBindingProperties.Producer);
            var producerBinding2     = binder.BindProducer($"foo{delimiter}yz", moduleOutputChannel2, producerBindingProperties.Producer);
            var consumerBinding1     = binder.BindConsumer($"foo{delimiter}xy", "testSendAndReceiveMultipleTopics", moduleInputChannel, consumerProperties);
            var consumerBinding2     = binder.BindConsumer($"foo{delimiter}yz", "testSendAndReceiveMultipleTopics", moduleInputChannel, consumerProperties);

            var testPayload1 = "foo" + Guid.NewGuid();
            var message1     = MessageBuilder.WithPayload(testPayload1.GetBytes()).SetHeader("contentType", MimeTypeUtils.APPLICATION_OCTET_STREAM).Build();
            var testPayload2 = "foo" + Guid.NewGuid();
            var message2     = MessageBuilder.WithPayload(testPayload2.GetBytes()).SetHeader("contentType", MimeTypeUtils.APPLICATION_OCTET_STREAM).Build();

            BinderBindUnbindLatency();
            moduleOutputChannel1.Send(message1);
            moduleOutputChannel2.Send(message2);
            var messages = new IMessage[] { Receive(moduleInputChannel), Receive(moduleInputChannel) };

            Assert.NotNull(messages[0]);
            Assert.NotNull(messages[1]);

            Assert.Contains(messages, (m) => ((byte[])m.Payload).GetString() == testPayload1);
            Assert.Contains(messages, (m) => ((byte[])m.Payload).GetString() == testPayload2);

            producerBinding1.Unbind();
            producerBinding2.Unbind();
            consumerBinding1.Unbind();
            consumerBinding2.Unbind();
        }
 protected abstract B GetBinder(RabbitBindingsOptions bindingsOptions = null);
        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();
        }
Example #16
0
 public RabbitTestBinder(IConnectionFactory connectionFactory, RabbitOptions rabbitOptions, RabbitBinderOptions binderOptions, RabbitBindingsOptions bindingsOptions, ILoggerFactory loggerFactory)
     : this(connectionFactory, new RabbitMessageChannelBinder(GetApplicationContext(), loggerFactory.CreateLogger <RabbitMessageChannelBinder>(), connectionFactory, rabbitOptions, binderOptions, bindingsOptions, new RabbitExchangeQueueProvisioner(connectionFactory, bindingsOptions, GetApplicationContext(), loggerFactory.CreateLogger <RabbitExchangeQueueProvisioner>())), loggerFactory.CreateLogger <RabbitTestBinder>())
 {
     BindingsOptions = bindingsOptions;
 }
 public RabbitTestBinder(IConnectionFactory connectionFactory, IOptionsMonitor <RabbitOptions> rabbitOptions, IOptionsMonitor <RabbitBinderOptions> binderOptions, IOptionsMonitor <RabbitBindingsOptions> bindingsOptions, ILoggerFactory loggerFactory)
     : this(connectionFactory, new RabbitMessageChannelBinder(GetApplicationContext(), loggerFactory.CreateLogger <RabbitMessageChannelBinder>(), connectionFactory, rabbitOptions, binderOptions, bindingsOptions, new RabbitExchangeQueueProvisioner(connectionFactory, bindingsOptions, GetApplicationContext(), loggerFactory.CreateLogger <RabbitExchangeQueueProvisioner>())), loggerFactory.CreateLogger <RabbitTestBinder>())
 {
     BindingsOptions = bindingsOptions.CurrentValue;
     _loggerFactory  = loggerFactory;
 }
 public RabbitMessageChannelBinder(IApplicationContext context, ILogger <RabbitMessageChannelBinder> logger, SteeltoeConnectionFactory connectionFactory, RabbitOptions rabbitOptions, RabbitBinderOptions binderOptions, RabbitBindingsOptions bindingsOptions, RabbitExchangeQueueProvisioner provisioningProvider, IListenerContainerCustomizer containerCustomizer)
     : this(context, logger, connectionFactory, rabbitOptions, binderOptions, bindingsOptions, provisioningProvider, containerCustomizer, null)
 {
 }
        public void TestAnonymousGroup()
        {
            var binder                 = GetBinder();
            var bindingsOptions        = new RabbitBindingsOptions();
            var producerOptions        = GetProducerOptions("input", bindingsOptions);
            var producerBindingOptions = CreateProducerBindingOptions(producerOptions);
            var output                 = CreateBindableChannel("output", producerBindingOptions);

            var consumerOptions = GetConsumerOptions("output", bindingsOptions);
            var delimiter       = GetDestinationNameDelimiter();
            var producerBinding = binder.BindProducer($"defaultGroup{delimiter}0", output, producerBindingOptions.Producer);

            var input1   = new QueueChannel();
            var binding1 = binder.BindConsumer($"defaultGroup{delimiter}0", null, input1, consumerOptions);

            var input2   = new QueueChannel();
            var binding2 = binder.BindConsumer($"defaultGroup{delimiter}0", null, input2, consumerOptions);

            var testPayload1 = "foo-" + Guid.NewGuid().ToString();

            output.Send(MessageBuilder.WithPayload(testPayload1)
                        .SetHeader(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.TEXT_PLAIN)
                        .Build());

            var receivedMessage1 = (Message <byte[]>)Receive(input1);

            Assert.NotNull(receivedMessage1);
            Assert.Equal(testPayload1, Encoding.UTF8.GetString(receivedMessage1.Payload));

            var receivedMessage2 = (Message <byte[]>)Receive(input2);

            Assert.NotNull(receivedMessage2);
            Assert.Equal(testPayload1, Encoding.UTF8.GetString(receivedMessage2.Payload));

            binding2.Unbind();

            var testPayload2 = "foo-" + Guid.NewGuid().ToString();

            output.Send(MessageBuilder.WithPayload(testPayload2)
                        .SetHeader(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.TEXT_PLAIN)
                        .Build());

            binding2 = binder.BindConsumer($"defaultGroup{delimiter}0", null, input2, consumerOptions);
            var testPayload3 = "foo-" + Guid.NewGuid().ToString();

            output.Send(MessageBuilder.WithPayload(testPayload3)
                        .SetHeader(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.TEXT_PLAIN)
                        .Build());

            receivedMessage1 = (Message <byte[]>)Receive(input1);
            Assert.NotNull(receivedMessage1);
            Assert.Equal(testPayload2, Encoding.UTF8.GetString(receivedMessage1.Payload));
            receivedMessage1 = (Message <byte[]>)Receive(input1);
            Assert.NotNull(receivedMessage1);
            Assert.NotNull(receivedMessage1.Payload);

            receivedMessage2 = (Message <byte[]>)Receive(input2);
            Assert.NotNull(receivedMessage2);
            Assert.Equal(testPayload3, Encoding.UTF8.GetString(receivedMessage2.Payload));

            producerBinding.Unbind();
            binding1.Unbind();
            binding2.Unbind();
        }
Example #20
0
 public RabbitExchangeQueueProvisioner(IConnectionFactory connectionFactory, RabbitBindingsOptions bindingsOptions, IApplicationContext applicationContext, ILogger <RabbitExchangeQueueProvisioner> logger)
     : this(connectionFactory, new List <IDeclarableCustomizer>(), bindingsOptions, applicationContext, logger)
 {
 }