在 Laravel documentation有 Queue::before
和 Queue::after
事件。我正在寻找的是“作业推送到队列”或“作业创建”事件,例如Queue::pushed
。该事件是否存在或者我如何触发该事件?
在 this answer我看到了 JobPushed
事件,但它来自 Laravel Horizon。有没有没有地平线的方法?
Queue::before(function (JobProcessing $event) {
// $event->connectionName
// $event->job
// $event->job->payload()
});
Queue::after(function (JobProcessed $event) {
// $event->connectionName
// $event->job
// $event->job->payload()
});
最佳答案
您可以使用作业类的构造函数作为作业创建
事件。当您创建作业对象的新实例时,就会执行作业对象构造函数。但其他函数(例如:handle() 和...)会在作业在队列中运行时执行。
此外,对于推送到队列的作业
,您可以覆盖作业类的调度函数。作业对象有一个静态函数调度,它将新的作业对象插入队列。
所以您编辑的工作类别将如下所示:
<?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;
class SampleJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->created();
// rest of code
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
}
public static function dispatch($job)
{
SampleJob::dispatch($job);
$job->pushedToQueue();
}
// events
public function created()
{
// event codes
}
public function pushedToQueue()
{
// event codes
}
}
关于php - Laravel 作业被推送到队列事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63314849/