问题描述
我正在创建一个生成视频的应用程序。这是一个非常密集的功能,需要几分钟才能生成。所以我想为此创建一个异步过程。经过一些研究,我了解了Laravel中的Jobs和Queues。
但是现在我的工作没有插入jobs
表中。我找不到我做错了什么。
我开始工作的功能:
public function generate() {
$id = Auth::user()->id;
GenerateJob::dispatch($id);
}
我的工作
<?PHP
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Auth;
class GenerateJob implements ShouldQueue
{
use dispatchable,InteractsWithQueue,Queueable,SerializesModels;
public function __construct($dossierId)
{
$this->dossierId = $dossierId;
}
public function handle()
{
sleep(5);
}
}
.ENV QUEUE_DRIVER=database
我确实跑过PHP artisan clear:config
,但似乎无济于事。
我尝试的所有方法似乎都无效。 jobs
表保持为空,并且作业同步执行,而不是异步执行。我在这里想念什么?
解决方法
经过数小时的调试,我终于找到了解决问题的方法。将->onConnection('database');
添加到GenerateJob::dispatch($dossier_id);
可以解决所有问题。
我希望我能说出为什么这样做是必要的,但是由于我已经把它放在我的.env文件中,所以我不知道。希望这对这种情况下的其他人有所帮助。 :-)