/// <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();
            _rcp = rchanp;

            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));
            }
        }
Exemplo n.º 2
0
        public static async Task ReceiveMessagesForeverAsync(IRabbitConnectionPool rcp)
        {
            ResetThreadName(Thread.CurrentThread, "Transient ReceiveMessagesForever Thread");
            while (true)
            {
                var chan1 = rcp.GetConnection().CreateModel();
                var chan2 = rcp.GetConnection().CreateModel();
                var chan3 = rcp.GetConnection().CreateModel();

                if (chan1.MessageCount(queueName) > 0)
                {
                    var task1 = ReceiveMessageAsync(chan1);
                    var task2 = ReceiveMessageAsync(chan2);
                    var task3 = ReceiveMessageAsync(chan3);

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

                chan1.Close(200, happyShutdown);
                chan1.Dispose();

                chan2.Close(200, happyShutdown);
                chan2.Dispose();

                chan3.Close(200, happyShutdown);
                chan3.Dispose();
            }
        }
Exemplo n.º 3
0
        public static async Task SendMessagesForeverAsync(IRabbitConnectionPool rcp)
        {
            ResetThreadName(Thread.CurrentThread, "Transient SendMessagesForever Thread");
            int counter = 0;

            while (true)
            {
                var chan1 = rcp.GetConnection().CreateModel();
                var chan2 = rcp.GetConnection().CreateModel();
                var chan3 = rcp.GetConnection().CreateModel();

                var task1 = SendMessageAsync(chan1, counter++);
                var task2 = SendMessageAsync(chan2, counter++);
                var task3 = SendMessageAsync(chan3, counter++);

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

                chan1.Close(200, happyShutdown);
                chan1.Dispose();

                chan2.Close(200, happyShutdown);
                chan2.Dispose();

                chan3.Close(200, happyShutdown);
                chan3.Dispose();
            }
        }
        /// <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;
        }
Exemplo n.º 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;
        }
Exemplo n.º 6
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);
        }