code: func (ctl *Controller) Install(disp *tq.Dispatcher) {
  	ctl.m.Lock()
  	defer ctl.m.Unlock()
  
  	if ctl.disp != nil {
  		panic("mapper.Controller is already installed into a tq.Dispatcher")
  	}
  	ctl.disp = disp
  
  	disp.RegisterTask(&tasks.SplitAndLaunch{}, ctl.splitAndLaunchHandler, ctl.ControlQueue, nil)
  	disp.RegisterTask(&tasks.FanOutShards{}, ctl.fanOutShardsHandler, ctl.ControlQueue, nil)
  	disp.RegisterTask(&tasks.ProcessShard{}, ctl.processShardHandler, ctl.MapperQueue, nil)
  	disp.RegisterTask(&tasks.RequestJobStateUpdate{}, ctl.requestJobStateUpdateHandler, ctl.ControlQueue, nil)
  	disp.RegisterTask(&tasks.UpdateJobState{}, ctl.updateJobStateHandler, ctl.ControlQueue, nil)
  }
docs: // Install registers task queue task handlers in the given task queue
  // dispatcher.
  //
  // This must be done before Controller is used.
  //
  // There can be at most one Controller installed into an instance of TQ
  // dispatcher. Installing more will cause panics.
  //
  // If you need multiple different controllers for some reason, create multiple
  // tq.Dispatchers (with different base URLs, so they don't conflict with each
  // other) and install them all into the router.