code: func (b *Broker) Publish(ctx context.Context, signature *tasks.Signature) error {
  	// Adjust routing key (this decides which queue the message will be published to)
  	b.Broker.AdjustRoutingKey(signature)
  
  	msg, err := json.Marshal(signature)
  	if err != nil {
  		return fmt.Errorf("JSON marshal error: %s", err)
  	}
  
  	conn := b.open()
  	defer conn.Close()
  
  	// Check the ETA signature field, if it is set and it is in the future,
  	// delay the task
  	if signature.ETA != nil {
  		now := time.Now().UTC()
  
  		if signature.ETA.After(now) {
  			score := signature.ETA.UnixNano()
  			_, err = conn.Do("ZADD", redisDelayedTasksKey, score, msg)
  			return err
  		}
  	}
  
  	_, err = conn.Do("RPUSH", signature.RoutingKey, msg)
  	return err
  }
docs: // Publish places a new message on the default queue