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