Beispiel #1
0
        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();
                }
        }
Beispiel #2
0
        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);
                }
        }
Beispiel #3
0
        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);
            }
        }
Beispiel #4
0
        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();
                }
        }
Beispiel #5
0
        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);
                }
        }
Beispiel #6
0
        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();
            }
        }