Exemple #1
0
        public Task Run()
        {
            var connection      = _factory.Create();
            var publishChannel  = connection.OpenPublishChannel("test_exchange");
            var consumerId      = Guid.NewGuid();
            var consumerChannel = connection.OpenConsumerChannel("", $"response.{consumerId}");
            var consumer        = consumerChannel.RegisterDefaultConsumer();

            consumer.Start(consumerChannel.Exclusive, consumerChannel.AutoDelete);
            return(Task.Factory.StartNew(() =>
            {
                var semaphore = new SemaphoreSlim(16);
                Console.WriteLine("[Client] Starting Ping Client");
                var tasks = Enumerable.Range(1, 128).Select(async i =>
                {
                    await semaphore.WaitAsync();
                    var stopWatch = new Stopwatch();
                    stopWatch.Start();
                    var responseMessage = await publishChannel.Request(new PingCommand {
                        Sequence = i
                    },
                                                                       "test_queue",
                                                                       $"response.{consumerId}");
                    stopWatch.Stop();
                    if (responseMessage is PingCommandResult pong)
                    {
                        Console.WriteLine($"[Client] Pong received, Sequence = {pong.Sequence}, RTT = {stopWatch.ElapsedMilliseconds}ms");
                    }
                    semaphore.Release();
                });
                Task.WhenAll(tasks).Wait();
                publishChannel.Close();
            }));
        }
Exemple #2
0
        public Task Run()
        {
            Console.WriteLine("[Server] Starting Ping Server");
            var serverConnection = _factory.Create();
            var serverChannel    = serverConnection.OpenConsumerChannel(
                "test_exchange",
                "test_queue",
                exclusive: false,
                autoDelete: false);
            var consumer = serverChannel.RegisterMediatRConsumer(Assembly.GetExecutingAssembly());

            consumer.Start(serverChannel.Exclusive, serverChannel.AutoDelete);
            return(Task.Factory.StartNew(() =>
            {
                Console.WriteLine("[Server] Ping Server Started");
                try
                {
                    while (true)
                    {
                        Thread.Sleep(TimeSpan.FromSeconds(30));
                        Console.WriteLine("[Server] Heartbeat");
                    }
                }
                catch (OperationCanceledException)
                {
                    Console.WriteLine("[Server] Cancellation Received, Shutting Down");
                    serverChannel.Consumers[0].Stop();
                    serverConnection.Close();
                }
            }, _tokenSource.Token));
        }