123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- <?php
-
- namespace Illuminate\Queue;
-
- use Illuminate\Support\ServiceProvider;
- use Illuminate\Queue\Connectors\SqsConnector;
- use Illuminate\Queue\Connectors\NullConnector;
- use Illuminate\Queue\Connectors\SyncConnector;
- use Illuminate\Queue\Connectors\RedisConnector;
- use Illuminate\Contracts\Debug\ExceptionHandler;
- use Illuminate\Queue\Connectors\DatabaseConnector;
- use Illuminate\Queue\Failed\NullFailedJobProvider;
- use Illuminate\Queue\Connectors\BeanstalkdConnector;
- use Illuminate\Queue\Failed\DatabaseFailedJobProvider;
-
- class QueueServiceProvider extends ServiceProvider
- {
- /**
- * Indicates if loading of the provider is deferred.
- *
- * @var bool
- */
- protected $defer = true;
-
- /**
- * Register the service provider.
- *
- * @return void
- */
- public function register()
- {
- $this->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',
- ];
- }
- }
|