protected AbstractMessageListenerContainer(IApplicationContext applicationContext, IConnectionFactory connectionFactory, string name = null, ILoggerFactory loggerFactory = null)
 {
     _loggerFactory                   = loggerFactory;
     _logger                          = _loggerFactory?.CreateLogger(GetType());
     ApplicationContext               = applicationContext;
     ConnectionFactory                = connectionFactory;
     ErrorHandler                     = new ConditionalRejectingErrorHandler(_logger);
     MessageHeadersConverter          = new DefaultMessageHeadersConverter(_logger);
     ExclusiveConsumerExceptionLogger = new DefaultExclusiveConsumerLogger();
     BatchingStrategy                 = new SimpleBatchingStrategy(0, 0, 0L);
     TransactionAttribute             = new DefaultTransactionAttribute();
     ServiceName                      = name ?? GetType().Name + "@" + GetHashCode();
 }
Пример #2
0
        public void TestBatch()
        {
            var bs      = new SimpleBatchingStrategy(2, 10_000, 10_000L);
            var headers = new RabbitHeaderAccessor();

            headers.ContentType = "test/plain";
            var message = Message.Create(Encoding.UTF8.GetBytes("test1"), headers.MessageHeaders);

            bs.AddToBatch("foo", "bar", message);
            message = Message.Create(Encoding.UTF8.GetBytes("test2"), headers.MessageHeaders);
            var batched = bs.AddToBatch("foo", "bar", message);

            Assert.True(batched.HasValue);
            var batchMessage    = batched.Value.Message;
            var batchHeaders    = batchMessage.Headers;
            var headerConverter = new DefaultMessageHeadersConverter();
            var props           = new MockRabbitBasicProperties();

            headerConverter.FromMessageHeaders(batchHeaders, props, Encoding.UTF8);
            props.ContentType = "text/plain";

            var config   = new ConfigurationBuilder().Build();
            var services = new ServiceCollection().BuildServiceProvider();
            var context  = new GenericApplicationContext(services, config);
            var channel  = new Mock <R.IModel>();

            channel.Setup(c => c.IsOpen).Returns(true);

            var getResponse = new R.BasicGetResult(123Ul, false, "ex", "rk", 0, props, (byte[])batchMessage.Payload);

            channel.Setup(c => c.BasicGet("foo", false)).Returns(getResponse);
            var connection = new Mock <R.IConnection>();

            connection.Setup(c => c.IsOpen).Returns(true);
            connection.Setup(c => c.CreateModel()).Returns(channel.Object);
            var connectionFactory = new Mock <R.IConnectionFactory>();

            connectionFactory.Setup(f => f.CreateConnection(It.IsAny <string>())).Returns(connection.Object);

            var ccf      = new CachingConnectionFactory(connectionFactory.Object);
            var source   = new RabbitMessageSource(context, ccf, "foo");
            var received = source.Receive();

            Assert.NotNull(received);
            var asList = received.Payload as List <object>;

            Assert.NotNull(asList);
            Assert.Contains("test1", asList);
            Assert.Contains("test2", asList);
        }
        public void TestSendAndReceiveInCallback()
        {
            template.ConvertAndSend(ROUTE, "message");
            var messagePropertiesConverter = new DefaultMessageHeadersConverter();
            var result = template.Execute <string>((c) =>
            {
                var response = c.BasicGet(ROUTE, false);
                var props    = messagePropertiesConverter.ToMessageHeaders(
                    response.BasicProperties,
                    new Envelope(response.DeliveryTag, response.Redelivered, response.Exchange, response.RoutingKey),
                    EncodingUtils.Utf8);
                c.BasicAck(response.DeliveryTag, false);
                return(new SimpleMessageConverter().FromMessage <string>(Message.Create(response.Body, props)));
            });

            Assert.Equal("message", result);
            result = template.ReceiveAndConvert <string>(ROUTE);
            Assert.Null(result);
        }