diff --git a/src/MongodbQueueServiceProvider.php b/src/MongodbQueueServiceProvider.php index a0f8e0361..7edfdb97f 100644 --- a/src/MongodbQueueServiceProvider.php +++ b/src/MongodbQueueServiceProvider.php @@ -2,23 +2,46 @@ namespace Jenssegers\Mongodb; +use Illuminate\Queue\Failed\NullFailedJobProvider; use Illuminate\Queue\QueueServiceProvider; use Jenssegers\Mongodb\Queue\Failed\MongoFailedJobProvider; class MongodbQueueServiceProvider extends QueueServiceProvider { /** - * @inheritdoc + * Register the failed job services. + * + * @return void */ protected function registerFailedJobServices() { - // Add compatible queue failer if mongodb is configured. - if ($this->app['db']->connection(config('queue.failed.database'))->getDriverName() == 'mongodb') { - $this->app->singleton('queue.failer', function ($app) { - return new MongoFailedJobProvider($app['db'], config('queue.failed.database'), config('queue.failed.table')); - }); - } else { - parent::registerFailedJobServices(); - } + $this->app->singleton('queue.failer', function ($app) { + $config = $app['config']['queue.failed']; + + if (array_key_exists('driver', $config) && + (is_null($config['driver']) || $config['driver'] === 'null')) { + return new NullFailedJobProvider; + } + + if (isset($config['driver']) && $config['driver'] === 'mongodb') { + return $this->mongoFailedJobProvider($config); + } elseif (isset($config['driver']) && $config['driver'] === 'dynamodb') { + return $this->dynamoFailedJobProvider($config); + } elseif (isset($config['driver']) && $config['driver'] === 'database-uuids') { + return $this->databaseUuidFailedJobProvider($config); + } elseif (isset($config['table'])) { + return $this->databaseFailedJobProvider($config); + } else { + return new NullFailedJobProvider; + } + }); + } + + /** + * Create a new MongoDB failed job provider. + */ + protected function mongoFailedJobProvider(array $config): MongoFailedJobProvider + { + return new MongoFailedJobProvider($this->app['db'], $config['database'], $config['table']); } } diff --git a/tests/TestCase.php b/tests/TestCase.php index cf379a652..584ff82de 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -71,5 +71,6 @@ protected function getEnvironmentSetUp($app) 'expire' => 60, ]); $app['config']->set('queue.failed.database', 'mongodb2'); + $app['config']->set('queue.failed.driver', 'mongodb'); } } diff --git a/tests/config/queue.php b/tests/config/queue.php index 20ef36703..7d52487fa 100644 --- a/tests/config/queue.php +++ b/tests/config/queue.php @@ -17,6 +17,7 @@ 'failed' => [ 'database' => env('MONGO_DATABASE'), + 'driver' => 'mongodb', 'table' => 'failed_jobs', ],