也许我对Laravel队列的工作没有理解,或者它本身不起作用,我对Laravel Queue / Dispatch的预期行为是,如果从Controller启动调度,调度到队列的代码应该以静默方式执行并在后台。最终用户浏览器不必等待代码执行。
然而,这是我的代码所发生的事情,队列的调度代码在执行时离开浏览器“Spinning ...”。
这是预期的行为吗?代码:
**Controller:**
public function make_eps_certs($tbl_eps)
{
//dd(Carbon::now()->addMinutes(10))
Log::info('Dispatching maeEPSCert to Queue');
$var_result=makeEPSCerts::dispatch($tbl_eps)->onQueue('eventadmin')
->delay(10);
return redirect()->back();
}
**Job:**
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use App\partSubs;
use Log;
use Image;
class makeEPSCerts implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
protected $passdata;
public $timeout = 120;
public function __construct($passdata)
{
Log::info('Constructing makeEPSCert');
$this->passdata = $passdata;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
try
{
Log::info('Beginning makeEPSCert');
$tbl_eps=$this->passdata;
.....
答案 0 :(得分:2)
将LOG_DRIVER
中的.env
更改为database
,然后使用php artisan queue:table
创建所需的迁移文件,之后执行php artisan migrate
。
之后你只需要运行php artisan queue:work --queue="eventadmin"
然后你会认识到预期的行为
可在此处找到更详细的文档:https://laravel.com/docs/5.5/queues
答案 1 :(得分:0)
您可以通过以下方式重试(我假设您在 Laravel 文档中做了说明,但总有一天它不起作用):
第 1 步:删除数据库中的表“jobs”。
第 2 步:在控制台中运行命令 'php artisan migrate' 以再次创建表 'jobs'。
第 3 步:在控制台中运行命令 'php artisan queue:work'
第 4 步:重试您的应用
请注意,在 .env 文件中,您设置了:
QUEUE_CONNECTION=数据库
QUEUE_DRIVER=数据库
P/s:对我有用!