registerManager(); $this->registerConnection(); $this->registerWorker(); $this->registerListener(); $this->registerFailedJobServices(); } /** * Register the queue manager. * * @return void */ protected function registerManager() { $this->app->singleton('queue', function ($app) { // Once we have an instance of the queue manager, we will register the various // resolvers for the queue connectors. These connectors are responsible for // creating the classes that accept queue configs and instantiate queues. return tap(new QueueManager($app), function ($manager) { $this->registerConnectors($manager); }); }); } /** * Register the default queue connection binding. * * @return void */ protected function registerConnection() { $this->app->singleton('queue.connection', function ($app) { return $app['queue']->connection(); }); } /** * Register the connectors on the queue manager. * * @param \Illuminate\Queue\QueueManager $manager * @return void */ public function registerConnectors($manager) { foreach (['Null', 'Sync', 'Database', 'Redis', 'Beanstalkd', 'Sqs'] as $connector) { $this->{"register{$connector}Connector"}($manager); } } /** * Register the Null queue connector. * * @param \Illuminate\Queue\QueueManager $manager * @return void */ protected function registerNullConnector($manager) { $manager->addConnector('null', function () { return new NullConnector; }); } /** * Register the Sync queue connector. * * @param \Illuminate\Queue\QueueManager $manager * @return void */ protected function registerSyncConnector($manager) { $manager->addConnector('sync', function () { return new SyncConnector; }); } /** * Register the database queue connector. * * @param \Illuminate\Queue\QueueManager $manager * @return void */ protected function registerDatabaseConnector($manager) { $manager->addConnector('database', function () { return new DatabaseConnector($this->app['db']); }); } /** * Register the Redis queue connector. * * @param \Illuminate\Queue\QueueManager $manager * @return void */ protected function registerRedisConnector($manager) { $manager->addConnector('redis', function () { return new RedisConnector($this->app['redis']); }); } /** * Register the Beanstalkd queue connector. * * @param \Illuminate\Queue\QueueManager $manager * @return void */ protected function registerBeanstalkdConnector($manager) { $manager->addConnector('beanstalkd', function () { return new BeanstalkdConnector; }); } /** * Register the Amazon SQS queue connector. * * @param \Illuminate\Queue\QueueManager $manager * @return void */ protected function registerSqsConnector($manager) { $manager->addConnector('sqs', function () { return new SqsConnector; }); } /** * Register the queue worker. * * @return void */ protected function registerWorker() { $this->app->singleton('queue.worker', function () { return new Worker( $this->app['queue'], $this->app['events'], $this->app[ExceptionHandler::class] ); }); } /** * Register the queue listener. * * @return void */ protected function registerListener() { $this->app->singleton('queue.listener', function () { return new Listener($this->app->basePath()); }); } /** * Register the failed job services. * * @return void */ protected function registerFailedJobServices() { $this->app->singleton('queue.failer', function () { $config = $this->app['config']['queue.failed']; return isset($config['table']) ? $this->databaseFailedJobProvider($config) : new NullFailedJobProvider; }); } /** * Create a new database failed job provider. * * @param array $config * @return \Illuminate\Queue\Failed\DatabaseFailedJobProvider */ protected function databaseFailedJobProvider($config) { return new DatabaseFailedJobProvider( $this->app['db'], $config['database'], $config['table'] ); } /** * Get the services provided by the provider. * * @return array */ public function provides() { return [ 'queue', 'queue.worker', 'queue.listener', 'queue.failer', 'queue.connection', ]; } }