Example #1
0
        static async Task Start()
        {
            var receiverConfig = CreateReceiverConfig();

            receiverConfig.PurgeOnStartup(true);

            //Create queue or purge it if present
            var receiver = await Endpoint.Start(receiverConfig);

            await receiver.Stop();

            var senderConfig = new EndpointConfiguration("TestHarness.Sender");

            senderConfig.SendOnly();
            senderConfig.UsePersistence <InMemoryPersistence>();
            var transport = senderConfig.UseTransport <SqlServerTransport>();

            transport.ConnectionString(@"Data Source=.\SQLEXPRESS;Initial Catalog=nservicebus;Integrated Security=True");
            var routing = transport.Routing();

            routing.RouteToEndpoint(typeof(TestMessage), "TestHarness.Receiver");
            routing.RouteToEndpoint(typeof(DoneMessage), "TestHarness.Receiver");
            routing.RouteToEndpoint(typeof(InitMessage), "TestHarness.Receiver");

            var sender = await Endpoint.Start(senderConfig);

            await sender.Send(new InitMessage());

            var concurrencyLimiter = new SemaphoreSlim(8);
            var runningTasks       = new ConcurrentDictionary <Task, Task>();

            for (var i = 0; i < MessageCount; i++)
            {
                await concurrencyLimiter.WaitAsync();

                var receiveTask = Send(concurrencyLimiter, sender);
                runningTasks.TryAdd(receiveTask, receiveTask);

#pragma warning disable 4014
                receiveTask.ContinueWith((t, state) =>
#pragma warning restore 4014
                {
                    var receiveTasks = (ConcurrentDictionary <Task, Task>)state;
                    receiveTasks.TryRemove(t, out Task _);
                }, runningTasks, TaskContinuationOptions.ExecuteSynchronously);
            }

            var allTasks = runningTasks.Values.ToArray();
            await Task.WhenAll(allTasks);

            await sender.Send(new DoneMessage());

            await sender.Stop();

            await Task.Delay(2000);

            Console.WriteLine($"Sending {MessageCount} messages complete");

            receiverConfig = CreateReceiverConfig();
            var tcs   = new TaskCompletionSource <bool>();
            var stats = new ReceiveStats(tcs);
            receiverConfig.RegisterComponents(c => c.RegisterSingleton(stats));
            receiver = await Endpoint.Start(receiverConfig);

            await tcs.Task;
            await receiver.Stop();

            Console.WriteLine("Press <enter> to exit");
            Console.ReadLine();
        }
Example #2
0
 public DoneMessageHandler(ReceiveStats receiveStats)
 {
     this.receiveStats = receiveStats;
 }
Example #3
0
 public InitMessageHandler(ReceiveStats receiveStats)
 {
     this.receiveStats = receiveStats;
 }