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(); }
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); }