'This function does the work to read from an exchange.'

@inlineCallbacks
def setup_read(self, exchange, routing_key, callback):

    if (not (exchange == '')):
        (yield self.channel.exchange_declare(exchange=exchange, type='topic', durable=True, auto_delete=False))
    self.channel.queue_declare(queue=routing_key, durable=True)
    (queue, consumer_tag) = (yield self.channel.basic_consume(queue=routing_key, no_ack=False))
    d = queue.get()
    d.addCallback(self._read_item, queue, callback)
    d.addErrback(self._read_item_err)
