亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel 作業隊列調度現在不會像往常一樣失敗

Laravel 作業隊列調度現在不會像往常一樣失敗

PHP
慕的地8271018 2022-07-16 10:15:30
我有一份工作來測試失敗是如何工作的:<?phpnamespace 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);    }我猜這……很好,但并不理想。
查看完整描述

3 回答

?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

如果我沒記錯, dispatchNow()用于同步運行作業,但不幸的是,它不會調用失敗的方法。

如果您希望在作業失敗時調用失敗的方法,那么您可以使用以下代碼。

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

它將同步運行作業并執行失敗的方法。


查看完整回答
反對 回復 2022-07-16
?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

dispatchSync()Laravel 8.0 將在未來幾個月發布一個新方法。
就像@Keshari 的回答所暗示的那樣,它將在同步隊列上調度作業。

文檔:https
://laravel.com/docs/master/queues#synchronous-dispatching 提交:https ://github.com/laravel/framework/commit/0b3ed6859046258fba2e0ab3340bdab33e4c82bd


查看完整回答
反對 回復 2022-07-16
?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

查看 Laravel 代碼庫(和文檔),該dispatchNow()方法在不與任何隊列交互的情況下同步執行作業。

https://laravel.com/docs/5.8/queues#synchronous-dispatching

從本質上講,它只會handle()在您的工作中調用該方法,僅此而已。

你對 try/catch 塊所做的可能是目前最好的解決方案,但值得將其作為 Laravel 團隊的功能請求提出。


查看完整回答
反對 回復 2022-07-16
  • 3 回答
  • 0 關注
  • 183 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號