code: func (r *Rabbus) Listen(c ListenConfig) (chan ConsumerMessage, error) {
  	if err := c.validate(); err != nil {
  		return nil, err
  	}
  
  	msgs, err := r.CreateConsumer(c.Exchange, c.Key, c.Kind, c.Queue, r.config.durable)
  	if err != nil {
  		return nil, err
  	}
  
  	r.mu.Lock()
  	r.conDeclared++ // increase the declared consumers counter
  	r.exDeclared[c.Exchange] = struct{}{}
  	r.mu.Unlock()
  
  	messages := make(chan ConsumerMessage, 256)
  	go r.wrapMessage(c, msgs, messages)
  	go r.listenReconn(c, messages)
  
  	return messages, nil
  }
docs: // Listen to a message from RabbitMQ, returns
  // an error if exchange, queue name and function handler not passed or if an error occurred while creating
  // amqp consumer.