コード例 #1
0
        public async Task Publish_Consume_Performance()
        {
            var watch = Stopwatch.StartNew();

            watch.Restart();
            var bus = Host.Services.GetRequiredService <IServiceBus>();
            await Task.WhenAll(Enumerable.Range(0, PublishCount).Select(async i =>
            {
                var msg = new TestObjectUpdated {
                    Id = Guid.NewGuid()
                };
                await bus.Publish(msg);
            }));

            watch.Stop();
            var rate          = Math.Round(PublishCount / watch.Elapsed.TotalMinutes, 2);
            var avg           = Math.Round(watch.Elapsed.TotalMilliseconds / PublishCount, 2);
            var publishResult = new
            {
                Published   = PublishCount,
                PublishRate = $"{rate:n} msgs per min",
                PublishAvg  = $"{avg:n}ms per msg"
            };

            watch.Restart();
            while (TestObjectUpdatedConsumer.Completed < PublishCount)
            {
                if (!await TestObjectUpdatedConsumer.WaitAsync(5000))
                {
                    break;
                }
            }
            watch.Stop();
            rate = Math.Round(TestObjectUpdatedConsumer.Completed / watch.Elapsed.TotalMinutes, 2);
            avg  = Math.Round(watch.Elapsed.TotalMilliseconds / TestObjectUpdatedConsumer.Completed, 2);
            var consumeResult = new
            {
                TestObjectUpdatedConsumer.Completed,
                ConsumeRate = $"{rate:n} msgs per min",
                ConsumeAvg  = $"{avg:n}ms per msg"
            };

            Console.WriteLine(publishResult);
            Console.WriteLine(consumeResult);
            Assert.AreEqual(PublishCount, TestObjectUpdatedConsumer.Completed);
        }
コード例 #2
0
        public async Task Publish_Consume()
        {
            var bus = Host.Services.GetRequiredService <IServiceBus>();
            var msg = new TestObjectUpdated {
                Id = Guid.NewGuid()
            };
            await bus.Publish(msg);

            //test that the update consumer has received the message only once
            await TestObjectUpdatedConsumer.WaitAsync(5000);

            Assert.AreEqual(1, TestObjectUpdatedConsumer.Consumed);
            Assert.AreEqual(1, TestObjectUpdatedConsumer.Completed);
            Assert.AreEqual(0, TestObjectUpdatedConsumer.Remaining);
            Assert.NotNull(TestObjectUpdatedConsumer.LastContext);
            Assert.AreEqual(0, TestObjectUpdatedConsumer.LastContext.Retries);
            Assert.AreEqual(0, TestObjectUpdatedConsumer.LastContext.Redeliveries);
        }