我有一份工作是为了测试失败是如何工作的:
<?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());
}
}
Run Code Online (Sandbox Code Playgroud)
当我正常调度时,它会转到failed函数并完全按预期写入文件。
但是,当我这样做时FakeJob::dispatchNow($apiUser);,它根本不会这样做......
有没有办法dispatchNow在与请求相同的进程上运行,但失败,就像它正常排队一样?
因为目前,看起来我唯一的方法是执行以下操作:
$fakeJob = new FakeJob($apiUser);
try {
$fakeJob->handle();
} catch(Exception $e) {
$fakeJob->failed($e);
}
Run Code Online (Sandbox Code Playgroud)
这是...很好,我想,但并不理想。
小智 7
如果我没看错,dispatchNow()用于同步运行作业,但不幸的是,它没有调用失败的方法。
如果您希望在作业失败时调用失败的方法,则可以使用以下代码。
FakeJob::dispatch($apiUser)->onConnection('sync');
Run Code Online (Sandbox Code Playgroud)
它将同步运行作业并执行失败的方法。
| 归档时间: |
|
| 查看次数: |
6034 次 |
| 最近记录: |