code: func (b *Broker) consumeOne(delivery amqp.Delivery, taskProcessor iface.TaskProcessor) error {
  	if len(delivery.Body) == 0 {
  		delivery.Nack(true, false)                     // multiple, requeue
  		return errors.New("Received an empty message") // RabbitMQ down?
  	}
  
  	var multiple, requeue = false, false
  
  	// Unmarshal message body into signature struct
  	signature := new(tasks.Signature)
  	decoder := json.NewDecoder(bytes.NewReader(delivery.Body))
  	decoder.UseNumber()
  	if err := decoder.Decode(signature); err != nil {
  		delivery.Nack(multiple, requeue)
  		return errs.NewErrCouldNotUnmarshaTaskSignature(delivery.Body, err)
  	}
  
  	// If the task is not registered, we nack it and requeue,
  	// there might be different workers for processing specific tasks
  	if !b.IsTaskRegistered(signature.Name) {
  		if !delivery.Redelivered {
  			requeue = true
  			log.INFO.Printf("Task not registered with this worker. Requeing message: %s", delivery.Body)
  		}
  		delivery.Nack(multiple, requeue)
  		return nil
  	}
  
  	log.INFO.Printf("Received new message: %s", delivery.Body)
  
  	err := taskProcessor.Process(signature)
  	delivery.Ack(multiple)
  	return err
  }
docs: // consumeOne processes a single message using TaskProcessor