Support for Lumen 7
lukascocula opened this issue · 3 comments
Hello,
there is check for Lumen version in LumenServiceProvider, line: 52, to perform registration of Worker.
My current version of Lumen is Lumen (7.2.1) (Laravel Components ^7.0)
, so it is not matching. It re-opens problem reported and fixed here
Error log:
Illuminate\Contracts\Container\BindingResolutionException: Unresolvable dependency resolving [Parameter #3 [ <required> callable $isDownForMaintenance ]] in class Illuminate\Queue\Worker in /var/app/current/vendor/illuminate/container/Container.php:1028
Could you please add supporting for Lumen 7? Thank you.
You can write your own service provider that takes away that logic:
<?php
namespace App\Providers;
use Dusterio\AwsWorker\Integrations\BindsWorker;
use Dusterio\PlainSqs\Sqs\Connector;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Queue;
use Illuminate\Queue\Events\JobProcessed;
use Illuminate\Queue\QueueManager;
use Illuminate\Queue\Worker;
use Illuminate\Contracts\Debug\ExceptionHandler;
/**
* Class CustomQueueServiceProvider
* @package App\Providers
*/
class LumenSQSServiceProvider extends ServiceProvider
{
use BindsWorker;
/**
* @return void
*/
public function register()
{
if (function_exists('env') && ! env('REGISTER_WORKER_ROUTES', true)) return;
$this->bindWorker();
$this->addRoutes(isset( $this->app->router ) ? $this->app->router : $this->app );
}
/**
* @param mixed $router
* @return void
*/
protected function addRoutes($router)
{
$router->post('/worker/schedule', 'Dusterio\AwsWorker\Controllers\WorkerController@schedule');
$router->post('/worker/queue', 'Dusterio\AwsWorker\Controllers\WorkerController@queue');
}
/**
* @return void
*/
public function boot()
{
$this->app->singleton(QueueManager::class, function() {
return new QueueManager($this->app);
});
$this->app->singleton(Worker::class, function () {
$isDownForMaintenance = function () {
return $this->app->isDownForMaintenance();
};
return new Worker(
$this->app['queue'],
$this->app['events'],
$this->app[ExceptionHandler::class],
$isDownForMaintenance
);
});
}
}
And then in the bootstrap.php file:
$app->register(App\Providers\LumenSQSServiceProvider::class);
You can write your own service provider that takes away that logic:
<?php namespace App\Providers; use Dusterio\AwsWorker\Integrations\BindsWorker; use Dusterio\PlainSqs\Sqs\Connector; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Queue; use Illuminate\Queue\Events\JobProcessed; use Illuminate\Queue\QueueManager; use Illuminate\Queue\Worker; use Illuminate\Contracts\Debug\ExceptionHandler; /** * Class CustomQueueServiceProvider * @package App\Providers */ class LumenSQSServiceProvider extends ServiceProvider { use BindsWorker; /** * @return void */ public function register() { if (function_exists('env') && ! env('REGISTER_WORKER_ROUTES', true)) return; $this->bindWorker(); $this->addRoutes(isset( $this->app->router ) ? $this->app->router : $this->app ); } /** * @param mixed $router * @return void */ protected function addRoutes($router) { $router->post('/worker/schedule', 'Dusterio\AwsWorker\Controllers\WorkerController@schedule'); $router->post('/worker/queue', 'Dusterio\AwsWorker\Controllers\WorkerController@queue'); } /** * @return void */ public function boot() { $this->app->singleton(QueueManager::class, function() { return new QueueManager($this->app); }); $this->app->singleton(Worker::class, function () { $isDownForMaintenance = function () { return $this->app->isDownForMaintenance(); }; return new Worker( $this->app['queue'], $this->app['events'], $this->app[ExceptionHandler::class], $isDownForMaintenance ); }); } }
And then in the bootstrap.php file:
$app->register(App\Providers\LumenSQSServiceProvider::class);
Yes, I already implemented my custom version fo LumenServiceProvider and register it instead of library provider. I'm reporting this to be resolved for other developers.
Yes, and I am just commenting to help less talented developers 👍