Laravel 5.7作业队列未运行异步

Wal*_*lly 1 php queue jobs laravel

我正在尝试使用Laravel 5.7 作业队列在数据库中进行一些插入/更新,并且可能出错了,因为调用该作业时似乎阻塞了我的应用程序,因此不能异步运行。我的代码具有以下结构:

.env

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
Run Code Online (Sandbox Code Playgroud)

queue.php

'default' => env('QUEUE_CONNECTION', 'sync'),

'connections' => [

    'sync' => [
        'driver' => 'sync',
    ],

    'database' => [
        'driver' => 'database',
        'table' => 'jobs',
        'queue' => 'default',
        'retry_after' => 90,
    ],
Run Code Online (Sandbox Code Playgroud)

job_caller.php

method_name(){ 
  InsereProspeccao::dispatch($path, $evento, $equipe)->onQueue('jobs');
  retur some_msg_to_user;
}
Run Code Online (Sandbox Code Playgroud)

job_name.php

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

class InsereProspeccao implements ShouldQueue{

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

  private $path = '';
  private $evento = '';
  private $equipe = '';


 public function __construct($path, $evento, $equipe){
     $this->path = $path;
     $this->evento = $evento;
     $this->equipe = $equipe;        
 }

   public function handle(){
      //all program logic
      //access DB for insert/update
   }

}
Run Code Online (Sandbox Code Playgroud)

观察员:我正在阅读文档,但我无法找到会发生什么的错误!

Mih*_*nde 6

您正在使用的QUEUE_CONNECTION=sync基本上具有同步行为。

请按照以下步骤操作:

  • 运行php artisan queue:table将自动为jobs表创建迁移

  • 运行php artisan migrate,它将通过运行迁移来创建表

  • 进行更改,QUEUE_CONNECTION=database并且默认情况下,它将自动使用jobs表来管理队列。

  • 运行php artisan config:clear以清除应用程序配置缓存

那应该很好。查看文档以获取更多帮助。

  • 一个重要的附加步骤是[运行队列工作器](https://laravel.com/docs/5.7/queues#running-the-queue-worker),大多数人对此似乎有点不知所措。 (2认同)