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);
        }
Example #2
0
        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;
        }
Example #3
0
 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);
 }