public IRabbitMqConnection GetConnection()
        {
            lock (_lock)
            {
                if (_availableConnections.TryDequeue(out var connection) && connection.IsOpen)
                {
                    return(connection);
                }

                connection?.Dispose();

                var factory      = CreateConnectionFactory();
                var connectionId = ConnectionId.New();

                connection = new RabbitMqConnection(connectionId, factory.CreateConnection(connectionId), this, _options);

                return(connection);
            }
        }
        public void ReturnConnection(RabbitMqConnection connection, bool reRegisterForFinalization)
        {
            lock (_lock)
            {
                if (connection.IsOpen)
                {
                    if (reRegisterForFinalization)
                    {
                        GC.ReRegisterForFinalize(connection);
                    }

                    connection.Reset();

                    _availableConnections.Enqueue(connection);
                    return;
                }

                connection.UnderlyingConnection?.Dispose();
            }
        }