示例#1
0
        public void TestConverted()
        {
            var template = provider.GetRabbitTemplate();
            var foo1     = new Foo1
            {
                Bar = "bar"
            };
            var ctx       = provider.GetService <IApplicationContext>();
            var converter = ctx.GetService <ISmartMessageConverter>(JsonMessageConverter.DEFAULT_SERVICE_NAME) as JsonMessageConverter;

            converter.TypeMapper.DefaultType = typeof(Dictionary <string, object>);
            converter.Precedence             = TypePrecedence.TYPE_ID;
            var returned = template.ConvertSendAndReceive <Foo2>("test.converted", foo1);

            Assert.IsType <Foo2>(returned);
            Assert.Equal("bar", returned.Bar);
            converter.Precedence = TypePrecedence.INFERRED;

            template.MessageConverter = new Support.Converter.SimpleMessageConverter();
            var messagePostProcessor = new MessagePostProcessor();
            var returned2            = template.ConvertSendAndReceive <byte[]>(string.Empty, "test.converted", "{ \"bar\" : \"baz\" }", messagePostProcessor);

            Assert.Equal("{\"bar\":\"baz\"}", Encoding.UTF8.GetString(returned2));

            var returned3 = template.ConvertSendAndReceive <byte[]>(string.Empty, "test.converted.list", "[{ \"bar\" : \"baz\" }]", messagePostProcessor);

            Assert.Equal("{\"bar\":\"BAZZZZ\"}", Encoding.UTF8.GetString(returned3));

            var returned4 = template.ConvertSendAndReceive <byte[]>(string.Empty, "test.converted.array", "[{ \"bar\" : \"baz\" }]", messagePostProcessor);

            Assert.Equal("{\"bar\":\"BAZZxx\"}", Encoding.UTF8.GetString(returned4));

            var returned5 = template.ConvertSendAndReceive <byte[]>(string.Empty, "test.converted.args1", "{ \"bar\" : \"baz\" }", messagePostProcessor);

            Assert.Equal("\"bar=baztest.converted.args1\"", Encoding.UTF8.GetString(returned5));

            var returned6 = template.ConvertSendAndReceive <byte[]>(string.Empty, "test.converted.args2", "{ \"bar\" : \"baz\" }", messagePostProcessor);

            Assert.Equal("\"bar=baztest.converted.args2\"", Encoding.UTF8.GetString(returned6));

            var beanMethodHeaders = new List <string>();
            var mpp = new AfterReceivePostProcessors(beanMethodHeaders);

            template.SetAfterReceivePostProcessors(mpp);
            var returned7 = template.ConvertSendAndReceive <byte[]>(string.Empty, "test.converted.message", "{ \"bar\" : \"baz\" }", messagePostProcessor);

            Assert.Equal("\"bar=bazFoo2MessageFoo2Service\"", Encoding.UTF8.GetString(returned7));
            Assert.Equal(2, beanMethodHeaders.Count);
            Assert.Equal("Foo2Service", beanMethodHeaders[0]);
            Assert.Equal("Foo2Message", beanMethodHeaders[1]);

            template.RemoveAfterReceivePostProcessor(mpp);
            var foo2Service = ctx.GetService <Foo2Service>();

            Assert.IsType <Foo2Service>(foo2Service.Bean);
            Assert.NotNull(foo2Service.Method);
            Assert.Equal("Foo2Message", foo2Service.Method.Name);

            var returned8 = template.ConvertSendAndReceive <byte[]>(string.Empty, "test.notconverted.message", "{ \"bar\" : \"baz\" }", messagePostProcessor);

            Assert.Equal("\"fooMessage`1\"", Encoding.UTF8.GetString(returned8));
            Assert.Equal("string", foo2Service.StringHeader);
            Assert.Equal(42, foo2Service.IntHeader);

            var returned9 = template.ConvertSendAndReceive <byte[]>(string.Empty, "test.notconverted.channel", "{ \"bar\" : \"baz\" }", messagePostProcessor);

            Assert.Equal("\"barAndChannel\"", Encoding.UTF8.GetString(returned9));

            var returned10 = template.ConvertSendAndReceive <byte[]>(string.Empty, "test.notconverted.messagechannel", "{ \"bar\" : \"baz\" }", messagePostProcessor);

            Assert.Equal("\"bar=bazMessage`1AndChannel\"", Encoding.UTF8.GetString(returned10));

            var returned11 = template.ConvertSendAndReceive <byte[]>(string.Empty, "test.notconverted.messagingmessage", "{ \"bar\" : \"baz\" }", messagePostProcessor);

            Assert.Equal("\"Message`1Dictionary`2\"", Encoding.UTF8.GetString(returned11));

            var returned12 = template.ConvertSendAndReceive <byte[]>(string.Empty, "test.converted.foomessage", "{ \"bar\" : \"baz\" }", messagePostProcessor);

            Assert.Equal("\"Message`1Foo2guest\"", Encoding.UTF8.GetString(returned12));

            var returned13 = template.ConvertSendAndReceive <byte[]>(string.Empty, "test.notconverted.messagingmessagenotgeneric", "{ \"bar\" : \"baz\" }", messagePostProcessor);

            Assert.Equal("\"Message`1Dictionary`2\"", Encoding.UTF8.GetString(returned13));
        }
        public C CreateListenerContainer(IRabbitListenerEndpoint endpoint)
        {
            var instance = CreateContainerInstance();

            instance.ConnectionFactory = ConnectionFactory;
            instance.ErrorHandler      = ErrorHandler;

            if (MessageConverter != null && endpoint != null)
            {
                endpoint.MessageConverter = MessageConverter;
            }

            if (AcknowledgeMode.HasValue)
            {
                instance.AcknowledgeMode = AcknowledgeMode.Value;
            }

            if (ChannelTransacted.HasValue)
            {
                instance.IsChannelTransacted = ChannelTransacted.Value;
            }

            if (ApplicationContext != null)
            {
                instance.ApplicationContext = ApplicationContext;
            }

            if (TransactionManager != null)
            {
                instance.TransactionManager = TransactionManager;
            }

            if (PrefetchCount.HasValue)
            {
                instance.PrefetchCount = PrefetchCount.Value;
            }

            if (DefaultRequeueRejected.HasValue)
            {
                instance.DefaultRequeueRejected = DefaultRequeueRejected.Value;
            }

            if (RecoveryBackOff != null)
            {
                instance.RecoveryBackOff = RecoveryBackOff;
            }

            if (MismatchedQueuesFatal.HasValue)
            {
                instance.MismatchedQueuesFatal = MismatchedQueuesFatal.Value;
            }

            if (MissingQueuesFatal.HasValue)
            {
                instance.MissingQueuesFatal = MissingQueuesFatal.Value;
            }

            if (ConsumerTagStrategy != null)
            {
                instance.ConsumerTagStrategy = ConsumerTagStrategy;
            }

            if (IdleEventInterval.HasValue)
            {
                instance.IdleEventInterval = IdleEventInterval.Value;
            }

            if (FailedDeclarationRetryInterval.HasValue)
            {
                instance.FailedDeclarationRetryInterval = FailedDeclarationRetryInterval.Value;
            }

            if (AutoStartup.HasValue)
            {
                instance.IsAutoStartup = AutoStartup.Value;
            }

            instance.Phase = Phase;
            if (AfterReceivePostProcessors != null)
            {
                instance.SetAfterReceivePostProcessors(AfterReceivePostProcessors.ToArray());
            }

            if (DeBatchingEnabled.HasValue)
            {
                instance.IsDeBatchingEnabled = DeBatchingEnabled.Value;
            }

            if (BatchListener && DeBatchingEnabled.HasValue)
            {
                // turn off container debatching by default for batch listeners
                instance.IsDeBatchingEnabled = false;
            }

            if (endpoint != null)
            {
                if (endpoint.AutoStartup.HasValue)
                {
                    instance.IsAutoStartup = endpoint.AutoStartup.Value;
                }

                if (endpoint.AckMode.HasValue)
                {
                    instance.AcknowledgeMode = endpoint.AckMode.Value;
                }

                if (endpoint.BatchingStrategy != null)
                {
                    instance.BatchingStrategy = endpoint.BatchingStrategy;
                }

                instance.ListenerId    = endpoint.Id;
                endpoint.BatchListener = BatchListener;
                endpoint.SetupListenerContainer(instance);
            }

            var adapterListener = instance.MessageListener as AbstractMessageListenerAdapter;

            if (adapterListener != null)
            {
                if (BeforeSendReplyPostProcessors != null)
                {
                    adapterListener.SetBeforeSendReplyPostProcessors(BeforeSendReplyPostProcessors.ToArray());
                }

                if (RetryTemplate != null)
                {
                    adapterListener.RetryTemplate = RetryTemplate;
                    if (ReplyRecoveryCallback != null)
                    {
                        adapterListener.RecoveryCallback = ReplyRecoveryCallback;
                    }
                }

                if (DefaultRequeueRejected.HasValue)
                {
                    adapterListener.DefaultRequeueRejected = DefaultRequeueRejected.Value;
                }

                if (endpoint != null && endpoint.ReplyPostProcessor != null)
                {
                    adapterListener.ReplyPostProcessor = endpoint.ReplyPostProcessor;
                }
            }

            InitializeContainer(instance, endpoint);

            ContainerCustomizer?.Invoke(instance);

            return(instance);
        }