/// <summary>
        /// RabbitConnectionPool shutdown method closes all connections and disposes them.
        /// </summary>
        public void Shutdown()
        {
            if (Monitor.TryEnter(_lockObj, TimeSpan.FromSeconds(_timeout)))
            {
                try
                {
                    if (!_shutdown)
                    {
                        _shutdown = true;

                        foreach (var connection in _connectionPool)
                        {
                            try
                            {
                                connection.Close(200, $"CookedRabbit connection ({connection.ClientProvidedName}) shutting down.");
                                connection.Dispose();
                            }
                            catch { }
                        }

                        _connectionPool    = new ConcurrentQueue <IConnection>();
                        _connectionFactory = null;
                        _seasoning         = null;
                    }
                }
                finally { Monitor.Exit(_lockObj); }
            }
        }
示例#2
0
        public BenchmarkFixture()
        {
            QueueName    = "CookedRabbit.Benchmark.Scaling";
            ExchangeName = string.Empty;

            // Configured for performance.
            var seasoning = new RabbitSeasoning
            {
                ThrottleFastBodyLoops = false,
                ThrowExceptions       = false,
                WriteErrorsToConsole  = false,
                WriteErrorsToILogger  = false,
                BatchBreakOnException = true
            };

            seasoning.PoolSettings.EnableAutoScaling         = true;
            seasoning.PoolSettings.EmptyPoolWaitTime         = 10;
            seasoning.PoolSettings.WriteSleepNoticeToConsole = false;
            seasoning.PoolSettings.ConnectionPoolCount       = 4;
            seasoning.PoolSettings.ChannelPoolCount          = 4;

            var channelPool = new RabbitChannelPool();

            channelPool.Initialize(seasoning).GetAwaiter().GetResult();

            DeliveryService    = new RabbitDeliveryService(seasoning, channelPool);
            TopologyService    = new RabbitTopologyService(seasoning, channelPool);
            MaintenanceService = new RabbitMaintenanceService(seasoning, channelPool);

            TopologyService.QueueDeclareAsync(QueueName).GetAwaiter().GetResult();
            Payloads = CreatePayloadsAsync(MessagesToSend, MessageSize).GetAwaiter().GetResult();
        }
        // Setting up two Burrows in this demo code.
        public static void SetupRabbitBurrows(RabbitSeasoning seasoning = null, ILogger logger = null)
        {
            if (_seasoning is null)
            {
                _seasoning = new RabbitSeasoning
                {
                    ThrottleFastBodyLoops = false,
                    ThrowExceptions       = false,
                    WriteErrorsToConsole  = true
                };

                _seasoning.FactorySettings.UseUri = true;
                _seasoning.FactorySettings.Uri    = new Uri("amqp://*****:*****@localhost:5672/");
                _seasoning.SerializeSettings.SerializationMethod = SerializationMethod.Utf8Json;
                _seasoning.PoolSettings.EnableAutoScaling        = true;
                _seasoning.PoolSettings.ConnectionName           = "RabbitBurrowAdvancedExamples";
                _seasoning.PoolSettings.ConnectionPoolCount      = 5;
                _seasoning.PoolSettings.ChannelPoolCount         = 25;
            }

            if (_burrow is null)
            {
                _logger = logger;
                _burrow = new RabbitBurrow(_seasoning, _logger);
            }

            if (_burrowAsyncDispatch is null)
            {
                _seasoning.FactorySettings.EnableDispatchConsumersAsync = true;
                _burrowAsyncDispatch = new RabbitBurrow(_seasoning, _logger);
            }
        }
        public StandardFixture()
        {
            Seasoning = new RabbitSeasoning
            {
                ThrottleFastBodyLoops = false,
                ThrowExceptions       = false
            };

            Seasoning.SerializeSettings.SerializationMethod = SerializationMethod.Utf8Json;
            Seasoning.FactorySettings.RabbitHostName        = "localhost";
            Seasoning.PoolSettings.EnableAutoScaling        = true;
            Seasoning.PoolSettings.ConnectionName           = "RabbitServiceTest";
            Seasoning.PoolSettings.ConnectionPoolCount      = 5;
            Seasoning.PoolSettings.ChannelPoolCount         = 25;

            Burrow = new RabbitBurrow(Seasoning);

            try
            {
                Burrow.Maintenance.QueueDeclareAsync(TestQueueName1).GetAwaiter().GetResult();
                Burrow.Maintenance.QueueDeclareAsync(TestQueueName2).GetAwaiter().GetResult();
                Burrow.Maintenance.QueueDeclareAsync(TestQueueName3).GetAwaiter().GetResult();
                Burrow.Maintenance.QueueDeclareAsync(TestQueueName4).GetAwaiter().GetResult();
                Burrow.Maintenance.ExchangeDeclareAsync(TestExchangeName, ExchangeType.Fanout.Description()).GetAwaiter().GetResult();
            }
            catch { }
        }
        /// <summary>
        /// CookedRabbit RabbitMaintenanceService constructor. Allows for the sharing of a channel pool. If channel pool is not initialized, it will automatically initialize in here.
        /// </summary>
        /// <param name="rabbitSeasoning"></param>
        /// <param name="rcp"></param>
        /// <param name="logger"></param>
        public RabbitMaintenanceService(RabbitSeasoning rabbitSeasoning, IRabbitChannelPool rcp, ILogger logger = null) : base(rabbitSeasoning, rcp, logger)
        {
            Guard.AgainstNull(rabbitSeasoning, nameof(rabbitSeasoning));
            Guard.AgainstNull(rcp, nameof(rcp));

            _logger    = logger;
            _seasoning = rabbitSeasoning;
            _rcp       = rcp;

            if (!_rcp.IsInitialized)
            {
                _rcp.Initialize(rabbitSeasoning).GetAwaiter().GetResult();
            }

            if (_seasoning.MaintenanceSettings.EnablePingPong)
            {
                _pingPong = PingPongAsync($"{_seasoning.MaintenanceSettings.PingPongQueueName}.{RandomString(5, 10)}", _cancellationTokenSource.Token);
            }

            if (_seasoning.MaintenanceSettings.ApiSettings.RabbitApiAccessEnabled)
            {
                var credentials = new NetworkCredential(
                    _seasoning.MaintenanceSettings.ApiSettings.RabbitApiUserName,
                    _seasoning.MaintenanceSettings.ApiSettings.RabbitApiUserPassword);

                _httpClient = CreateHttpClient(credentials, TimeSpan.FromSeconds(_seasoning.MaintenanceSettings.ApiSettings.RabbitApiTimeout));
            }
        }
示例#6
0
        /// <summary>
        /// CookedRabbit RabbitChannelPool factory.
        /// </summary>
        /// <param name="rabbitSeasoning"></param>
        /// <returns><see cref="IRabbitChannelPool"/></returns>
        public static async Task <IRabbitChannelPool> CreateRabbitChannelPoolAsync(RabbitSeasoning rabbitSeasoning)
        {
            var rcp = new RabbitChannelPool();
            await rcp.Initialize(rabbitSeasoning).ConfigureAwait(false);

            return(rcp);
        }
示例#7
0
        // RabbitBurrow Factory
        public static RabbitBurrow GetOrCreateRabbitBurrow(RabbitSeasoning seasoning = null, ILogger logger = null)
        {
            if (_burrow is null)
            {
                _logger = logger;

                if (_seasoning is null)
                {
                    _seasoning = new RabbitSeasoning
                    {
                        ThrottleFastBodyLoops = false,
                        ThrowExceptions       = false,
                        WriteErrorsToConsole  = true
                    };

                    _seasoning.FactorySettings.UseUri = true;
                    _seasoning.FactorySettings.Uri    = new Uri("amqp://*****:*****@localhost:5672/");
                    _seasoning.SerializeSettings.SerializationMethod = SerializationMethod.Utf8Json;
                    _seasoning.PoolSettings.EnableAutoScaling        = true;
                    _seasoning.PoolSettings.ConnectionName           = "RabbitBurrowExamples";
                    _seasoning.PoolSettings.ConnectionPoolCount      = 5;
                    _seasoning.PoolSettings.ChannelPoolCount         = 25;
                }

                _burrow = new RabbitBurrow(_seasoning, _logger);
            }

            return(_burrow);
        }
示例#8
0
        /// <summary>
        /// CookedRabbit RabbitChannelPool factory.
        /// </summary>
        /// <param name="rabbitSeasoning"></param>
        /// <returns><see cref="IRabbitChannelPool"/></returns>
        public static async Task <IRabbitChannelPool> CreateRabbitChannelPoolAsync(RabbitSeasoning rabbitSeasoning)
        {
            RabbitChannelPool rcp = new RabbitChannelPool();
            await rcp.Initialize(rabbitSeasoning);

            return(rcp);
        }
示例#9
0
        private async Task Setup(int messagesToSend, int messageSizes)
        {
            QueueName    = "CookedRabbit.Benchmark.Scaling";
            ExchangeName = string.Empty;

            // Configured for performance.
            var seasoning = new RabbitSeasoning
            {
                ThrottleFastBodyLoops = false,
                ThrowExceptions       = false,
                WriteErrorsToConsole  = false,
                WriteErrorsToILogger  = false,
                BatchBreakOnException = true
            };

            seasoning.PoolSettings.EnableAutoScaling         = true;
            seasoning.PoolSettings.EmptyPoolWaitTime         = 10;
            seasoning.PoolSettings.WriteSleepNoticeToConsole = false;
            seasoning.PoolSettings.ConnectionPoolCount       = 4;
            seasoning.PoolSettings.ChannelPoolCount          = 16;

            var channelPool = new RabbitChannelPool();
            await channelPool.Initialize(seasoning);

            _deliveryService    = new RabbitDeliveryService(seasoning, channelPool);
            _topologyService    = new RabbitTopologyService(seasoning, channelPool);
            _maintenanceService = new RabbitMaintenanceService(seasoning, channelPool);

            await _topologyService.QueueDeclareAsync(QueueName);

            Payloads = await CreatePayloadsAsync(messagesToSend, messageSizes);

            FirstRun = false;
        }
示例#10
0
        /// <summary>
        /// CookedRabbit RabbitTopologyService constructor. Allows for the sharing of a channel pool and connection pool.
        /// </summary>
        /// <param name="rabbitSeasoning"></param>
        /// <param name="rchanp"></param>
        /// <param name="rconp"></param>
        /// <param name="logger"></param>
        public RabbitMaintenanceService(RabbitSeasoning rabbitSeasoning,
                                        IRabbitChannelPool rchanp,
                                        IRabbitConnectionPool rconp,
                                        ILogger logger = null) : base(rabbitSeasoning, rchanp, rconp, logger)
        {
            Guard.AgainstNull(rabbitSeasoning, nameof(rabbitSeasoning));
            Guard.AgainstNull(rchanp, nameof(rchanp));
            Guard.AgainstNull(rconp, nameof(rconp));

            _logger    = logger;
            _seasoning = rabbitSeasoning;

            rchanp.SetConnectionPoolAsync(rabbitSeasoning, rconp).GetAwaiter().GetResult();
            RabbitChannelPool = rchanp;

            if (_seasoning.MaintenanceSettings.EnablePingPong)
            {
                PingPong = PingPongAsync($"{_seasoning.MaintenanceSettings.PingPongQueueName}", _cancellationTokenSource.Token);
            }

            if (_seasoning.MaintenanceSettings.ApiSettings.RabbitApiAccessEnabled)
            {
                var credentials = new NetworkCredential(
                    _seasoning.MaintenanceSettings.ApiSettings.RabbitApiUserName,
                    _seasoning.MaintenanceSettings.ApiSettings.RabbitApiUserPassword);

                _httpClient = GetOrCreateHttpClient(credentials, TimeSpan.FromSeconds(_seasoning.MaintenanceSettings.ApiSettings.RabbitApiTimeout));
            }
        }
示例#11
0
        public IntegrationFixture_Zero()
        {
            Seasoning = new RabbitSeasoning
            {
                ThrottleFastBodyLoops = false,
                ThrowExceptions       = false
            };

            Seasoning.SerializeSettings.SerializationMethod = SerializationMethod.ZeroFormat;
            Seasoning.FactorySettings.RabbitHostName        = "localhost";
            Seasoning.PoolSettings.EnableAutoScaling        = true;
            Seasoning.PoolSettings.ConnectionName           = "RabbitServiceTest";
            Seasoning.PoolSettings.ConnectionPoolCount      = 1;
            Seasoning.PoolSettings.ChannelPoolCount         = 2;

            var channelPool = new RabbitChannelPool();

            channelPool
            .SetConnectionPoolAsync(Seasoning, new RabbitConnectionPool())
            .GetAwaiter().GetResult();

            RabbitDeliveryService  = new RabbitDeliveryService(Seasoning, channelPool);
            RabbitTopologyService  = new RabbitTopologyService(Seasoning, channelPool);
            RabbitSerializeService = new RabbitSerializeService(Seasoning, channelPool);

            try
            {
                RabbitTopologyService.QueueDeleteAsync(TestQueueName1, false, false).GetAwaiter().GetResult();
                RabbitTopologyService.QueueDeleteAsync(TestQueueName2, false, false).GetAwaiter().GetResult();
                RabbitTopologyService.QueueDeleteAsync(TestQueueName3, false, false).GetAwaiter().GetResult();
                RabbitTopologyService.QueueDeleteAsync(TestQueueName4, false, false).GetAwaiter().GetResult();
                RabbitTopologyService.ExchangeDeleteAsync(TestExchangeName, false).GetAwaiter().GetResult();
            }
            catch { }
        }
        /// <summary>
        /// CookedRabbit RabbitTopologyService constructor.
        /// </summary>
        /// <param name="rabbitSeasoning"></param>
        /// <param name="logger"></param>
        public RabbitTopologyService(RabbitSeasoning rabbitSeasoning, ILogger logger = null)
        {
            Guard.AgainstNull(rabbitSeasoning, nameof(rabbitSeasoning));

            _logger           = logger;
            _seasoning        = rabbitSeasoning;
            RabbitChannelPool = Factories.CreateRabbitChannelPoolAsync(rabbitSeasoning).GetAwaiter().GetResult();
        }
        /// <summary>
        /// CookedRabbit RabbitSerializeService constructor.
        /// </summary>
        /// <param name="rabbitSeasoning"></param>
        /// <param name="logger"></param>
        public RabbitSerializeService(RabbitSeasoning rabbitSeasoning, ILogger logger = null) : base(rabbitSeasoning, logger)
        {
            Guard.AgainstNull(rabbitSeasoning, nameof(rabbitSeasoning));

            _logger    = logger;
            _seasoning = rabbitSeasoning;
            _rcp       = Factories.CreateRabbitChannelPoolAsync(rabbitSeasoning).GetAwaiter().GetResult();
        }
示例#14
0
        /// <summary>
        /// CookedRabbit RabbitTopologyService constructor. Allows for the sharing of a channel pool and connection pool.
        /// </summary>
        /// <param name="rabbitSeasoning"></param>
        /// <param name="rchanp"></param>
        /// <param name="rconp"></param>
        /// <param name="logger"></param>
        public RabbitTopologyService(RabbitSeasoning rabbitSeasoning, IRabbitChannelPool rchanp, IRabbitConnectionPool rconp, ILogger logger = null)
        {
            _logger    = logger;
            _seasoning = rabbitSeasoning;

            rchanp.SetConnectionPoolAsync(rabbitSeasoning, rconp).GetAwaiter().GetResult();

            _rcp = rchanp;
        }
示例#15
0
        /// <summary>
        /// CookedRabbit RabbitTopologyService constructor.  Allows for the sharing of a channel pool. If channel is not initialized, it will automatically initialize in here.
        /// </summary>
        /// <param name="rabbitSeasoning"></param>
        /// <param name="rcp"></param>
        /// <param name="logger"></param>
        public RabbitTopologyService(RabbitSeasoning rabbitSeasoning, IRabbitChannelPool rcp, ILogger logger = null)
        {
            _logger    = logger;
            _seasoning = rabbitSeasoning;
            _rcp       = rcp;

            if (!_rcp.IsInitialized)
            {
                _rcp.Initialize(rabbitSeasoning).GetAwaiter().GetResult();
            }
        }
        /// <summary>
        /// CookedRabbit RabbitSerializeService constructor. Allows for the sharing of a channel pool and connection pool.
        /// </summary>
        /// <param name="rabbitSeasoning"></param>
        /// <param name="rchanp"></param>
        /// <param name="rconp"></param>
        /// <param name="logger"></param>
        public RabbitSerializeService(RabbitSeasoning rabbitSeasoning, IRabbitChannelPool rchanp, IRabbitConnectionPool rconp, ILogger logger = null) : base(rabbitSeasoning, rchanp, rconp, logger)
        {
            Guard.AgainstNull(rabbitSeasoning, nameof(rabbitSeasoning));
            Guard.AgainstNull(rchanp, nameof(rchanp));
            Guard.AgainstNull(rconp, nameof(rconp));

            _logger    = logger;
            _seasoning = rabbitSeasoning;

            rchanp.SetConnectionPoolAsync(rabbitSeasoning, rconp).GetAwaiter().GetResult();

            _rcp = rchanp;
        }
示例#17
0
        public async Task PublishInParallelAsync()
        {
            QueueName = "CookedRabbit.Benchmark";

            // Configured for performance.
            var seasoning = new RabbitSeasoning
            {
                ThrottleFastBodyLoops = false,
                ThrowExceptions       = false,
                WriteErrorsToConsole  = false,
                WriteErrorsToILogger  = false,
                BatchBreakOnException = true
            };

            seasoning.PoolSettings.EnableAutoScaling         = true;
            seasoning.PoolSettings.EmptyPoolWaitTime         = 0;
            seasoning.PoolSettings.WriteSleepNoticeToConsole = false;
            seasoning.PoolSettings.ConnectionPoolCount       = 8;
            seasoning.PoolSettings.ChannelPoolCount          = 32;

            var channelPool = await Factories.CreateRabbitChannelPoolAsync(seasoning).ConfigureAwait(false);

            _deliveryService    = new RabbitDeliveryService(seasoning, channelPool);
            _topologyService    = new RabbitTopologyService(seasoning, channelPool);
            _maintenanceService = new RabbitMaintenanceService(seasoning, channelPool);

            var queueNames = new List <string>
            {
                $"{QueueName}.Scaling_00",
                $"{QueueName}.Scaling_01",
                $"{QueueName}.Scaling_02",
                $"{QueueName}.Scaling_03",
                $"{QueueName}.Scaling_04",
                $"{QueueName}.Scaling_05",
                $"{QueueName}.Scaling_06",
                $"{QueueName}.Scaling_07",
                $"{QueueName}.Scaling_08",
                $"{QueueName}.Scaling_09",
            };

            var envelopes = await CreateEnvelopesAsync(queueNames, MessagesToSend, MessageSizes).ConfigureAwait(false);

            foreach (string queueName in queueNames)
            {
                await _topologyService.QueueDeclareAsync(queueName).ConfigureAwait(false);

                await _maintenanceService.PurgeQueueAsync(queueName).ConfigureAwait(false);
            }

            await _deliveryService.PublishInParallelAsync(envelopes).ConfigureAwait(false);
        }
        /// <summary>
        /// CookedRabbit RabbitSerializeService constructor. Allows for the sharing of a channel pool. If channel pool is not initialized, it will automatically initialize in here.
        /// </summary>
        /// <param name="rabbitSeasoning"></param>
        /// <param name="rcp"></param>
        /// <param name="logger"></param>
        public RabbitSerializeService(RabbitSeasoning rabbitSeasoning, IRabbitChannelPool rcp, ILogger logger = null) : base(rabbitSeasoning, rcp, logger)
        {
            Guard.AgainstNull(rabbitSeasoning, nameof(rabbitSeasoning));
            Guard.AgainstNull(rcp, nameof(rcp));

            _logger    = logger;
            _seasoning = rabbitSeasoning;
            _rcp       = rcp;

            if (!_rcp.IsInitialized)
            {
                _rcp.Initialize(rabbitSeasoning).GetAwaiter().GetResult();
            }
        }
        /// <summary>
        /// CookedRabbit RabbitTopologyService constructor. Allows for the sharing of a channel pool. If channel pool is not initialized, it will automatically initialize in here.
        /// </summary>
        /// <param name="rabbitSeasoning"></param>
        /// <param name="rcp"></param>
        /// <param name="logger"></param>
        public RabbitTopologyService(RabbitSeasoning rabbitSeasoning, IRabbitChannelPool rcp, ILogger logger = null)
        {
            Guard.AgainstNull(rabbitSeasoning, nameof(rabbitSeasoning));
            Guard.AgainstNull(rcp, nameof(rcp));

            _logger           = logger;
            _seasoning        = rabbitSeasoning;
            RabbitChannelPool = rcp;

            if (!RabbitChannelPool.IsInitialized)
            {
                RabbitChannelPool.Initialize(rabbitSeasoning).GetAwaiter().GetResult();
            }
        }
        public void Setup()
        {
            // Configured for performance.
            var seasoning = new RabbitSeasoning
            {
                ThrottleFastBodyLoops = false,
                ThrowExceptions       = false,
                WriteErrorsToConsole  = false,
                WriteErrorsToILogger  = false,
            };

            seasoning.PoolSettings.EnableAutoScaling         = true;
            seasoning.PoolSettings.EmptyPoolWaitTime         = 10;
            seasoning.PoolSettings.WriteSleepNoticeToConsole = false;
            seasoning.PoolSettings.ConnectionPoolCount       = 4;
            seasoning.PoolSettings.ChannelPoolCount          = 16;

            var channelPool = new RabbitChannelPool();

            channelPool.Initialize(seasoning).GetAwaiter().GetResult();

            _deliveryService = new RabbitDeliveryService(seasoning, channelPool);
            _topologyService = new RabbitTopologyService(seasoning, channelPool);
        }
        /// <summary>
        /// Initializes the RabbitConnectionPool for use.
        /// </summary>
        /// <param name="rabbitSeasoning"></param>
        /// <returns></returns>
        public async Task Initialize(RabbitSeasoning rabbitSeasoning)
        {
            _shutdown  = false;
            _seasoning = rabbitSeasoning;

            if (_connectionFactory is null)
            {
                _connectionFactory = await CreateConnectionFactoryAsync().ConfigureAwait(false);

                if (_connectionFactory is null)
                {
                    throw new ArgumentNullException("Connection factory is null.");
                }
            }

            if (!IsInitialized)
            {
                _connectionsToMaintain = _seasoning.PoolSettings.ConnectionPoolCount;

                await CreateConnectionsAsync(_seasoning.PoolSettings.ConnectionName).ConfigureAwait(false);

                IsInitialized = true;
            }
        }
示例#22
0
        public static async Task PublishInParallelAsync()
        {
            // Configured for performance.
            var seasoning = new RabbitSeasoning
            {
                ThrottleFastBodyLoops = false,
                ThrowExceptions       = false,
                WriteErrorsToConsole  = false,
                WriteErrorsToILogger  = false,
                BatchBreakOnException = true
            };

            seasoning.PoolSettings.EnableAutoScaling         = true;
            seasoning.PoolSettings.EmptyPoolWaitTime         = 0;
            seasoning.PoolSettings.WriteSleepNoticeToConsole = false;
            seasoning.PoolSettings.ConnectionPoolCount       = 10;
            seasoning.PoolSettings.ChannelPoolCount          = 40;

            await Console.Out.WriteLineAsync($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}: Creating RabbitChannelPool and RabbitServices...").ConfigureAwait(false);

            var sw = Stopwatch.StartNew();

            var channelPool = await Factories.CreateRabbitChannelPoolAsync(seasoning).ConfigureAwait(false);

            var deliveryService    = new RabbitDeliveryService(seasoning, channelPool);
            var topologyService    = new RabbitTopologyService(seasoning, channelPool);
            var maintenanceService = new RabbitMaintenanceService(seasoning, channelPool);

            sw.Stop();

            await Console.Out.WriteLineAsync($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}: Creating RabbitChannelPool and RabbitServices finished. Time: {sw.ElapsedMilliseconds} ms").ConfigureAwait(false);

            await Console.Out.WriteLineAsync($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}: Creating test data...").ConfigureAwait(false);

            sw.Reset();
            sw.Start();

            var queueNames = new List <string>
            {
                $"{QueueName}.Scaling_00",
                $"{QueueName}.Scaling_01",
                $"{QueueName}.Scaling_02",
                $"{QueueName}.Scaling_03",
                $"{QueueName}.Scaling_04",
                $"{QueueName}.Scaling_05",
                $"{QueueName}.Scaling_06",
                $"{QueueName}.Scaling_07",
                $"{QueueName}.Scaling_08",
                $"{QueueName}.Scaling_09",
            };

            var envelopes = await CreateEnvelopesAsync(queueNames, MessagesToSend, MessageSizes).ConfigureAwait(false);

            sw.Stop();

            await Console.Out.WriteLineAsync($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}: Creating test data finished. Time: {sw.ElapsedMilliseconds} ms").ConfigureAwait(false);

            await Console.Out.WriteLineAsync($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}: Creating and/or Purging benchmark queues...").ConfigureAwait(false);

            sw.Reset();
            sw.Start();
            foreach (string queueName in queueNames)
            {
                await topologyService.QueueDeclareAsync(queueName).ConfigureAwait(false);

                await maintenanceService.PurgeQueueAsync(queueName).ConfigureAwait(false);
            }
            sw.Stop();

            await Console.Out.WriteLineAsync($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}: Creating and/or Purging finished. Time: {sw.ElapsedMilliseconds} ms").ConfigureAwait(false);

            await Console.Out.WriteLineAsync($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}: Publish test starting...").ConfigureAwait(false);

            sw.Reset();
            sw.Start();
            await deliveryService.PublishInParallelAsync(envelopes).ConfigureAwait(false);

            sw.Stop();

            await Console.Out.WriteLineAsync($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}: Publish finished. Time: {sw.ElapsedMilliseconds} ms").ConfigureAwait(false);

            await Console.Out.WriteLineAsync($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}: Publish rate {(MessagesToSend/1.0 / (sw.ElapsedMilliseconds / 1000.0)).ToString("0.###")} msg/s").ConfigureAwait(false);

            await Console.Out.WriteLineAsync($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}: Purging benchmark queues...").ConfigureAwait(false);

            sw.Reset();
            sw.Start();
            foreach (string queueName in queueNames)
            {
                await topologyService.QueueDeclareAsync(queueName).ConfigureAwait(false);

                await maintenanceService.PurgeQueueAsync(queueName).ConfigureAwait(false);
            }
            sw.Stop();

            await Console.Out.WriteLineAsync($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}: Purging finished. Time: {sw.ElapsedMilliseconds} ms").ConfigureAwait(false);

            await Console.Out.WriteLineAsync($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}: Shutting down/disposing of services...").ConfigureAwait(false);

            sw.Reset();
            sw.Start();
            deliveryService.Dispose();
            topologyService.Dispose();
            maintenanceService.Dispose();
            sw.Stop();

            await Console.Out.WriteLineAsync($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}: Shutting down/disposing of services finished. Time: {sw.ElapsedMilliseconds} ms").ConfigureAwait(false);
        }
示例#23
0
 /// <summary>
 /// CookedRabbit RabbitTopologyService constructor.
 /// </summary>
 /// <param name="rabbitSeasoning"></param>
 /// <param name="logger"></param>
 public RabbitTopologyService(RabbitSeasoning rabbitSeasoning, ILogger logger = null)
 {
     _logger    = logger;
     _seasoning = rabbitSeasoning;
     _rcp       = Factories.CreateRabbitChannelPoolAsync(rabbitSeasoning).GetAwaiter().GetResult();
 }