0

before我知道您可以使用,afterfailing钩子来收听工作事件:

https://laravel.com/docs/5.6/queues#job-events

Queue::before(function (JobProcessing $event) {
    // $event->connectionName
    // $event->job
    // $event->job->payload()
});

不过,我只想在这里接某些工作。这些作业是从某个名为AbstractTask. 通常我会简单地执行一个instanceof检查,但这样的事情是行不通的:

$job instanceof AbstractTask

有什么方法可以标记这些工作事件将接手的工作?

编辑

似乎我想要的实际工作(这是我自己的工作类)可以在$event->job类似的地方找到:

$payload = json_decode($job->getRawBody());
$data = unserialize($payload->data->command);

if ($data instanceof AbstractTask) {
    dd($data);
}

我很难相信没有更简单的方法来获取实际正在处理的底层作业,所以我也提出了一个 Github 问题:

https://github.com/laravel/framework/issues/25189

4

1 回答 1

0

我在你的问题上发布了顺便说一句。

你能试试这个,看看是否resolveName给你你的工作/任务的正确类名:

Queue::before(function (JobProcessing $event) {
    $class = $event->job->resolveName();

    // without an instance
    if (is_a($class, AbstractTask::class, true)) {
        ...
    }

    // with an instance
    $instance = app($class);

    if ($instance instanceof AbstractTask) {
        ...
    }
});
于 2018-08-13T04:19:55.550 回答