public void CanSendAndReceiveMessages(int count, int consumers) { var sender = new RabbitMqMessageQueue(ConnectionString, "test.rabbit.sender", "test.rabbit.sender.error").PurgeInputQueue(); const string consumerInputQueue = "test.rabbit.receiver"; var competingConsumers = Enumerable.Range(0, consumers) .Select(i => new RabbitMqMessageQueue(ConnectionString, consumerInputQueue, consumerInputQueue + ".error").PurgeInputQueue()) .ToArray(); var messageCount = count*consumers; Console.WriteLine("Sending {0} messages", messageCount); messageCount.Times(() => sender.Send(consumerInputQueue, new TransportMessageToSend { Body = Encoding.UTF7.GetBytes("w00t!") })); Console.WriteLine("Receiving {0} messages", messageCount); long receivedMessageCount = 0; var stopwatch = Stopwatch.StartNew(); Parallel.For(0, consumers, i => count.Times(() => { var receivedTransportMessage = competingConsumers[i].ReceiveMessage(); if (receivedTransportMessage == null) return; Encoding.UTF7.GetString(receivedTransportMessage.Body).ShouldBe("w00t!"); Interlocked.Increment(ref receivedMessageCount); })); var totalSeconds = stopwatch.Elapsed.TotalSeconds; Console.WriteLine("Receiving {0} messages spread across {1} consumers took {2:0.0} s - that's {3:0} msg/s", messageCount, consumers, totalSeconds, messageCount/totalSeconds); }
protected RebusBus CreateBus(string inputQueueName, IActivateHandlers handlerActivator) { var rabbitMqMessageQueue = new RabbitMqMessageQueue(ConnectionString, inputQueueName, inputQueueName + ".error").PurgeInputQueue(); var bus = new RebusBus(handlerActivator, rabbitMqMessageQueue, rabbitMqMessageQueue, new InMemorySubscriptionStorage(), new InMemorySagaPersister(), this, new JsonMessageSerializer(), new TrivialPipelineInspector()); toDispose.Add(bus); toDispose.Add(rabbitMqMessageQueue); return bus; }
Tuple<ISendMessages, IReceiveMessages> RabbitMqTransports() { var sender = new RabbitMqMessageQueue(RabbitMqFixtureBase.ConnectionString,"tests.contracts.sender"); var receiver = new RabbitMqMessageQueue(RabbitMqFixtureBase.ConnectionString, "tests.contracts.receiver"); return new Tuple<ISendMessages, IReceiveMessages>(sender, receiver); }