版本:lumen5.6
出现问题:执行 artisan queue:work OR artisan queue:listen 队列执行无法应
运行队列时,cli既不报错也无任何反应,追踪队列启动文件“Illuminate\Queue\Worker”。
//在文件中追踪到此处,发现队列执行会根据预定义queue执行
protected function getNextJob($connection, $queue)
{
try {
foreach (explode(',', $queue) as $queue) {
if (! is_null($job = $connection->pop($queue))) {
return $job;
}
}
} catch (Exception $e) {
$this->exceptions->report($e);
$this->stopWorkerIfLostConnection($e);
} catch (Throwable $e) {
$this->exceptions->report($e = new FatalThrowableError($e));
$this->stopWorkerIfLostConnection($e);
}
}
在推送队列任务时,执行指定队列名称。laravel默认队列名称为“default”。
$user = User::find(1);
dispatch((new OrderExpireQueueJob($user)->onQueue('user'));
所以将laravel/lumen-framework/config中的queue.php文件复制一份至,/config目录下。
//在对应的消息驱动中,修改queue属性,例如使用database队列,增加'queue'=>'default,user'
'connections' => [
'sync' => [
'driver' => 'sync',
],
'database' => [
'driver' => 'database',
'table' => 'jobs',
'queue' => 'default,user',
'retry_after' => 60,
],
'beanstalkd' => [
'driver' => 'beanstalkd',
'host' => 'localhost',
'queue' => 'default',
'retry_after' => 60,
],
'sqs' => [
'driver' => 'sqs',
'key' => 'your-public-key',
'secret' => 'your-secret-key',
'queue' => 'your-queue-url',
'region' => 'us-east-1',
],
'redis' => [
'driver' => 'redis',
'connection' => env('QUEUE_REDIS_CONNECTION', 'default'),
'queue' => 'default',
'retry_after' => 60,
],
],
再次执行队列即可运行成功。根本原因是自定义了对名称导致的执行不到!