<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 async def connect(self):
 """ Create new asynchronous connection to the RabbitMQ instance. This will connect, declare exchange and bind itself to the configured queue. After that, client is ready to publish or consume messages. :return: Does not return anything. """

        if self.connected or self.is_connecting:
            return

        self._is_connecting = True
        try:
            logger.info("Connecting to RabbitMQ...")
            self._transport, self._protocol = await aioamqp.connect(**self._connection_parameters)

            logger.info("Getting channel...")
            self._channel = await self._protocol.channel()

            if self._global_qos is not None:
                logger.info("Setting prefetch count on connection (%s)", self._global_qos)
                await self._channel.basic_qos(0, self._global_qos, 1)

            logger.info("Connecting to exchange '%s (%s)'", self._exchange_name, self._exchange_type)
            await self._channel.exchange(self._exchange_name, self._exchange_type)

        except (aioamqp.AmqpClosedConnection, Exception):
            logger.error("Error initializing RabbitMQ connection", exc_info=True)
            self._is_connecting = False
            raise exceptions.StreamConnectionError

        self._is_connecting = False