gpt4 book ai didi

php - Laravel 作业队列调度现在不会像往常一样失败

转载 作者:行者123 更新时间:2023-12-03 18:34:44 26 4
gpt4 key购买 nike

我有一份工作是为了测试失败是如何工作的:

<?php

namespace App\Jobs;

use App\ApiUser;
use App\Helpers\Helper;
use Exception;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

class FakeJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

private $apiUser;

public function __construct(ApiUser $apiUser) {
$this->apiUser = $apiUser;
}

public function handle() {
throw new Exception('time is even');
}

public function failed(Exception $exception) {
// Send user notification of failure, etc...
$path = storage_path('logs/s3_logs/FakeJob_failed_' . Helper::generateRandomString(5) . '.txt');
file_put_contents($path, $exception->getMessage());
}
}

当我正常调度时,它会转到 failed 函数并完全按预期写入文件。

但是,当我像 FakeJob::dispatchNow($apiUser); 那样做时,它根本不会那样做...

有没有办法让 dispatchNow 运行在与请求相同的进程上,但是却像正常排队一样失败?

因为目前,看起来我唯一的方法是执行以下操作:
    $fakeJob = new FakeJob($apiUser);
try {
$fakeJob->handle();
} catch(Exception $e) {
$fakeJob->failed($e);
}

这是...很好,我想,但并不理想。

最佳答案

如果我没有猜错 dispatchNow() 用于同步运行作业,但不幸的是,它不会调用失败的方法。

如果您希望在作业失败时调用失败的方法,则可以使用以下代码。

FakeJob::dispatch($apiUser)->onConnection('sync');

它将同步运行作业并执行失败的方法。

关于php - Laravel 作业队列调度现在不会像往常一样失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59578987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com