code: func (worker *Worker) retryTaskIn(signature *tasks.Signature, retryIn time.Duration) error {
  	// Update task state to RETRY
  	if err := worker.server.GetBackend().SetStateRetry(signature); err != nil {
  		return fmt.Errorf("Set state to 'retry' for task %s returned error: %s", signature.UUID, err)
  	}
  
  	// Delay task by retryIn duration
  	eta := time.Now().UTC().Add(retryIn)
  	signature.ETA = &eta
  
  	log.WARNING.Printf("Task %s failed. Going to retry in %.0f seconds.", signature.UUID, retryIn.Seconds())
  
  	// Send the task back to the queue
  	_, err := worker.server.SendTask(signature)
  	return err
  }
docs: // taskRetryIn republishes the task to the queue with ETA of now + retryIn.Seconds()