/// <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));
            }
        }
예제 #2
0
        public static async Task PoolChannel_SendMessagesForeverAsync(IRabbitChannelPool rcp)
        {
            ResetThreadName(Thread.CurrentThread, "PoolChannel SendMessagesForever Thread");
            int counter = 0;

            while (true)
            {
                var chanPair1 = await rcp.GetPooledChannelPairAsync();

                var chanPair2 = await rcp.GetPooledChannelPairAsync();

                var chanPair3 = await rcp.GetPooledChannelPairAsync();

                var task1 = SendMessageAsync(chanPair1.Channel, counter++);
                var task2 = SendMessageAsync(chanPair2.Channel, counter++);
                var task3 = SendMessageAsync(chanPair3.Channel, counter++);

                await Task.WhenAll(new Task[] { task1, task2, task3 });

                rcp.ReturnChannelToPool(chanPair1);
                rcp.ReturnChannelToPool(chanPair2);
                rcp.ReturnChannelToPool(chanPair3);

                await Task.Delay(1); // Optional Throttle
            }
        }
예제 #3
0
        /// <summary>
        /// CookedRabbit RabbitBurrow constructor.
        /// </summary>
        /// <param name="rabbitSeasoning"></param>
        /// <param name="rchanp"></param>
        /// <param name="rconp"></param>
        /// <param name="logger"></param>
        public RabbitBurrow(RabbitSeasoning rabbitSeasoning, IRabbitChannelPool rchanp, IRabbitConnectionPool rconp, ILogger logger = null)
        {
            _seasoning = rabbitSeasoning;

            Transmission = new RabbitSerializeService(_seasoning, rchanp, rconp, logger);
            Maintenance  = new RabbitMaintenanceService(_seasoning, rchanp, rconp, logger);
        }
예제 #4
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));
            }
        }
예제 #5
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;
        }
예제 #6
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;
        }
        /// <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();
            }
        }
예제 #9
0
        /// <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();
            }
        }
예제 #10
0
        public static async Task PoolChannel_ReceiveMessagesForeverAsync(IRabbitChannelPool rcp)
        {
            ResetThreadName(Thread.CurrentThread, "PoolChannel ReceiveMessagesForever Thread");
            while (true)
            {
                var chanPair1 = await rcp.GetPooledChannelPairAsync();

                if (chanPair1.Channel.MessageCount(queueName) > 0)
                {
                    var chanPair2 = await rcp.GetPooledChannelPairAsync();

                    var chanPair3 = await rcp.GetPooledChannelPairAsync();

                    var chanPair4 = await rcp.GetPooledChannelPairAsync();

                    var chanPair5 = await rcp.GetPooledChannelPairAsync();

                    var chanPair6 = await rcp.GetPooledChannelPairAsync();

                    var task1 = ReceiveMessageAsync(chanPair1.Channel);
                    var task2 = ReceiveMessageAsync(chanPair2.Channel);
                    var task3 = ReceiveMessageAsync(chanPair3.Channel);
                    var task4 = ReceiveMessageAsync(chanPair4.Channel);
                    var task5 = ReceiveMessageAsync(chanPair5.Channel);
                    var task6 = ReceiveMessageAsync(chanPair6.Channel);

                    await Task.WhenAll(new Task[] { task1, task2, task3, task4, task5, task6 });

                    rcp.ReturnChannelToPool(chanPair1);
                    rcp.ReturnChannelToPool(chanPair2);
                    rcp.ReturnChannelToPool(chanPair3);
                    rcp.ReturnChannelToPool(chanPair4);
                    rcp.ReturnChannelToPool(chanPair5);
                    rcp.ReturnChannelToPool(chanPair6);

                    await Task.Delay(1); // Optional Throttle
                }
            }
        }