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