public void PublisherPerformance() { var exchange = new Exchange("eventflow"); var routingKey = new RoutingKey("performance"); var exceptions = new ConcurrentBag <Exception>(); const int threadCount = 100; const int messagesPrThread = 200; using (var consumer = new RabbitMqConsumer(_uri, "eventflow", new[] { "#" })) using (var resolver = BuildResolver(o => o.RegisterServices(sr => sr.Register <ILog, NullLog>()))) { var rabbitMqPublisher = resolver.Resolve <IRabbitMqPublisher>(); var threads = Enumerable.Range(0, threadCount) .Select(_ => { var thread = new Thread(o => SendMessages(rabbitMqPublisher, messagesPrThread, exchange, routingKey, exceptions)); thread.Start(); return(thread); }) .ToList(); foreach (var thread in threads) { thread.Join(); } var rabbitMqMessages = consumer.GetMessages(threadCount * messagesPrThread); rabbitMqMessages.Should().HaveCount(threadCount * messagesPrThread); exceptions.Should().BeEmpty(); } }
public void Scenario() { using (var consumer = new RabbitMqConsumer(_uri, "eventflow", new[] { "#" })) using (var resolver = BuildResolver()) { var commandBus = resolver.Resolve <ICommandBus>(); var eventJsonSerializer = resolver.Resolve <IEventJsonSerializer>(); var pingId = PingId.New; commandBus.Publish(new ThingyPingCommand(ThingyId.New, pingId), CancellationToken.None); var rabbitMqMessage = consumer.GetMessages().Single(); rabbitMqMessage.Exchange.Value.Should().Be("eventflow"); rabbitMqMessage.RoutingKey.Value.Should().Be("eventflow.domainevent.thingy.thingy-ping.1"); var pingEvent = (IDomainEvent <ThingyAggregate, ThingyId, ThingyPingEvent>)eventJsonSerializer.Deserialize( rabbitMqMessage.Message, new Metadata(rabbitMqMessage.Headers)); pingEvent.AggregateEvent.PingId.Should().Be(pingId); } }
public void Scenario() { using (var consumer = new RabbitMqConsumer(_uri, "eventflow", new[] { "#" })) using (var resolver = BuildResolver()) { var commandBus = resolver.Resolve<ICommandBus>(); var eventJsonSerializer = resolver.Resolve<IEventJsonSerializer>(); var pingId = PingId.New; commandBus.Publish(new PingCommand(TestId.New, pingId), CancellationToken.None); var rabbitMqMessage = consumer.GetMessages().Single(); rabbitMqMessage.Exchange.Value.Should().Be("eventflow"); rabbitMqMessage.RoutingKey.Value.Should().Be("eventflow.domainevent.test.ping-event.1"); var pingEvent = (IDomainEvent<TestAggregate, TestId, PingEvent>)eventJsonSerializer.Deserialize( rabbitMqMessage.Message, new Metadata(rabbitMqMessage.Headers)); pingEvent.AggregateEvent.PingId.Should().Be(pingId); } }
public async Task PublisherPerformance() { var exchange = new Exchange($"eventflow-{Guid.NewGuid():N}"); var routingKey = new RoutingKey("performance"); var exceptions = new ConcurrentBag <Exception>(); const int taskCount = 10; const int messagesPrThread = 200; const int totalMessageCount = taskCount * messagesPrThread; using (var consumer = new RabbitMqConsumer(_uri, exchange, new[] { "#" })) using (var resolver = BuildResolver(exchange, o => o.RegisterServices(sr => sr.Register <ILog, NullLog>()))) { var rabbitMqPublisher = resolver.Resolve <IRabbitMqPublisher>(); var tasks = Enumerable.Range(0, taskCount) .Select(i => Task.Run(() => SendMessagesAsync(rabbitMqPublisher, messagesPrThread, exchange, routingKey, exceptions))); await Task.WhenAll(tasks).ConfigureAwait(false); var rabbitMqMessages = consumer.GetMessages(TimeSpan.FromMinutes(1), totalMessageCount); rabbitMqMessages.Should().HaveCount(totalMessageCount); exceptions.Should().BeEmpty(); } }
public async Task Scenario() { var exchange = new Exchange($"eventflow-{Guid.NewGuid():N}"); using (var consumer = new RabbitMqConsumer(_uri, exchange, new[] { "#" })) using (var resolver = BuildResolver(exchange)) { var commandBus = resolver.Resolve <ICommandBus>(); var eventJsonSerializer = resolver.Resolve <IEventJsonSerializer>(); var pingId = PingId.New; await commandBus.PublishAsync(new ThingyPingCommand(ThingyId.New, pingId), CancellationToken.None).ConfigureAwait(false); var rabbitMqMessage = consumer.GetMessages(TimeSpan.FromMinutes(1)).Single(); rabbitMqMessage.Exchange.Value.Should().Be(exchange.Value); rabbitMqMessage.RoutingKey.Value.Should().Be("eventflow.domainevent.thingy.thingy-ping.1"); var pingEvent = (IDomainEvent <ThingyAggregate, ThingyId, ThingyPingEvent>)eventJsonSerializer.Deserialize( rabbitMqMessage.Message, new Metadata(rabbitMqMessage.Headers)); pingEvent.AggregateEvent.PingId.Should().Be(pingId); } }
public void PublisherPerformance() { var exchange = new Exchange("eventflow"); var routingKey = new RoutingKey("performance"); var exceptions = new ConcurrentBag<Exception>(); const int threadCount = 100; const int messagesPrThread = 200; using (var consumer = new RabbitMqConsumer(_uri, "eventflow", new[] {"#"})) using (var resolver = BuildResolver(o => o.RegisterServices(sr => sr.Register<ILog, NullLog>()))) { var rabbitMqPublisher = resolver.Resolve<IRabbitMqPublisher>(); var threads = Enumerable.Range(0, threadCount) .Select(_ => { var thread = new Thread(o => SendMessages(rabbitMqPublisher, messagesPrThread, exchange, routingKey, exceptions)); thread.Start(); return thread; }) .ToList(); foreach (var thread in threads) { thread.Join(); } var rabbitMqMessages = consumer.GetMessages(threadCount * messagesPrThread); rabbitMqMessages.Should().HaveCount(threadCount*messagesPrThread); exceptions.Should().BeEmpty(); } }