public static void Clear(IMessageChannel channel) { channel.Open(); for (var i = 0; i < 5; i++) { var m = new FakeMessage(); channel.Send(m); } channel.Clear(); var messages = channel.ReceiveMany(5, TimeSpan.MaxValue); Assert.AreEqual(0, messages.Count()); channel.Close(); }
public static void ReceiveTimeout(IMessageChannel channel) { var ts = new TimeSpan(0, 0, 0, 0, 500); channel.Open(); channel.Clear(); var m = new FakeMessage(); var m2 = new FakeMessage(); channel.Send(m); channel.Send(m2); var count = 0; foreach (var msg in channel.ReceiveMany(2, ts)) { count++; Thread.Sleep(500); } Assert.AreEqual(1, count); }
public static void TestThroughputSynchronously( IMessageChannel channel, int howManyMessages, int? maxMessagesToReceive) { var start = DateTime.Now; channel.Open(); Console.WriteLine("Sending {0} messages through the {1} channel", howManyMessages, channel.GetType().FullName); SendMessages(channel, howManyMessages); Console.WriteLine("Sent {0} messages in {1} seconds", howManyMessages, DateTime.Now.Subtract(start).TotalSeconds); start = DateTime.Now; var receivedMessageCount = 0; var numberTimesToLoop = 1; if (maxMessagesToReceive.HasValue) { numberTimesToLoop = howManyMessages / maxMessagesToReceive.Value + 1; } else { maxMessagesToReceive = howManyMessages; } for (var i = 0; i < numberTimesToLoop; i++) { foreach (var message in channel.ReceiveMany(maxMessagesToReceive.Value, TimeSpan.MaxValue)) { receivedMessageCount++; } if (howManyMessages - receivedMessageCount < maxMessagesToReceive) { maxMessagesToReceive = howManyMessages - receivedMessageCount; } } channel.Close(); Console.WriteLine("Received {0} messages in {1}", receivedMessageCount, DateTime.Now.Subtract(start).TotalSeconds); }
public static void TestThroughputAsynchronously( IMessageChannel channel, int howManyMessages, int howManyThreads, int? maxMessagesToReceive = null) { channel.Open(); var start = DateTime.Now; var numberTimesToLoop = 1; if (maxMessagesToReceive.HasValue) { var numberMessagesPerThread = howManyMessages / howManyThreads + 2; do { numberMessagesPerThread--; numberTimesToLoop = howManyMessages / (numberMessagesPerThread * howManyThreads) + 1; } while (numberMessagesPerThread > maxMessagesToReceive); Assert.LessOrEqual(numberMessagesPerThread, maxMessagesToReceive); maxMessagesToReceive = numberMessagesPerThread; } else { maxMessagesToReceive = howManyMessages / howManyThreads + 1; } Console.WriteLine( "Sending {0} messages through the {1} channel across {2} threads in batches of {3}", maxMessagesToReceive * howManyThreads * numberTimesToLoop, channel.GetType().FullName, howManyThreads, maxMessagesToReceive); for (var i = 0; i < numberTimesToLoop; i++) { var results = Parallel.For( 0, howManyThreads, x => { SendMessages(channel, maxMessagesToReceive.Value); channel.ReceiveMany(maxMessagesToReceive.Value, TimeSpan.MaxValue); }); Assert.True(results.IsCompleted); } Console.WriteLine( "Received {0} messages in {1} seconds", maxMessagesToReceive * howManyThreads * numberTimesToLoop, DateTime.Now.Subtract(start).TotalSeconds); channel.Close(); }