worker = $worker; } /** * Execute the console command. * * @return void */ public function fire() { if ($this->downForMaintenance() && ! $this->option('daemon')) { return $this->worker->sleep($this->option('sleep')); } $queue = $this->option('queue'); $delay = $this->option('delay'); // The memory limit is the amount of memory we will allow the script to occupy // before killing it and letting a process manager restart it for us, which // is to protect us against any memory leaks that will be in the scripts. $memory = $this->option('memory'); $connection = $this->argument('connection'); $response = $this->runWorker( $connection, $queue, $delay, $memory, $this->option('daemon') ); // If a job was fired by the worker, we'll write the output out to the console // so that the developer can watch live while the queue runs in the console // window, which will also of get logged if stdout is logged out to disk. if (! is_null($response['job'])) { $this->writeOutput($response['job'], $response['failed']); } } /** * Run the worker instance. * * @param string $connection * @param string $queue * @param int $delay * @param int $memory * @param bool $daemon * @return array */ protected function runWorker($connection, $queue, $delay, $memory, $daemon = false) { $this->worker->setDaemonExceptionHandler( $this->laravel['Illuminate\Contracts\Debug\ExceptionHandler'] ); if ($daemon) { $this->worker->setCache($this->laravel['cache']->driver()); return $this->worker->daemon( $connection, $queue, $delay, $memory, $this->option('sleep'), $this->option('tries') ); } return $this->worker->pop( $connection, $queue, $delay, $this->option('sleep'), $this->option('tries') ); } /** * Write the status output for the queue worker. * * @param \Illuminate\Contracts\Queue\Job $job * @param bool $failed * @return void */ protected function writeOutput(Job $job, $failed) { if ($failed) { $this->output->writeln('Failed: '.$job->getName()); } else { $this->output->writeln('Processed: '.$job->getName()); } } /** * Determine if the worker should run in maintenance mode. * * @return bool */ protected function downForMaintenance() { if ($this->option('force')) { return false; } return $this->laravel->isDownForMaintenance(); } /** * Get the console command arguments. * * @return array */ protected function getArguments() { return [ ['connection', InputArgument::OPTIONAL, 'The name of connection', null], ]; } /** * Get the console command options. * * @return array */ protected function getOptions() { return [ ['queue', null, InputOption::VALUE_OPTIONAL, 'The queue to listen on'], ['daemon', null, InputOption::VALUE_NONE, 'Run the worker in daemon mode'], ['delay', null, InputOption::VALUE_OPTIONAL, 'Amount of time to delay failed jobs', 0], ['force', null, InputOption::VALUE_NONE, 'Force the worker to run even in maintenance mode'], ['memory', null, InputOption::VALUE_OPTIONAL, 'The memory limit in megabytes', 128], ['sleep', null, InputOption::VALUE_OPTIONAL, 'Number of seconds to sleep when no job is available', 3], ['tries', null, InputOption::VALUE_OPTIONAL, 'Number of times to attempt a job before logging it failed', 0], ]; } }