簡體   English   中英

laravel - 在多個作業結束后執行作業

[英]laravel - Execute Job After Multiple Jobs End

我正在做一個項目,用戶給我一些輸入,然后我處理這些輸入。 此處理需要很長時間,因此我使用隊列,並且我想向用戶發送郵件,告知他們處理的數據已在我的應用程序上准備就緒。 我想要實現的是,將所有這些作業放入隊列中,然后處理它們,當用戶的所有處理結束時,向該用戶發送郵件。

我正在使用兩階段隊列。 首先,我獲取輸入並調度一個作業,其中輸入被解析並划分為子數據集,然后從該作業調度另一個作業,該作業處理來自第一個作業的解析輸入數據。 我這樣做的原因是,第一個工作比第二個工作花費的時間少,我想用工作只做處理,沒有任何中斷或額外的解析工作,第一階段是關於解析的,第二部分是所有關於處理。 處理部分可能會失敗,如果失敗,隊列會再次處理它,所以如果我不將輸入分成子作業,作業接近尾聲的失敗可能會導致作業的所有處理再次完成.

如果我將所有這些作業放入同一個隊列,並將該郵件作業分配給Queue::after方法,如果我理解正確,用戶可能必須等待所有隊列完成。 我希望能夠在處理完用戶的所有輸入后向用戶發送郵件,而無需等待處理任何其他用戶的輸入。 Laravel Queue 的文檔顯示了一個示例方法:

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

我從中了解到的是,這在每個處理完的作業之后都有效,並且我可以使用$event對象訪問作業屬性。 這不適用於我的兩階段隊列結構。 我知道我可以使用數據庫中的一些計數器來檢查所有處理是否已完成,但我想知道是否有更好、更優雅的方法來實現這一點。

非常感謝。

幾年過去了,但 Laravel 8 可能會為此提供一個解決方案:

https://github.com/laravel/framework/pull/32830

作業可以批量運行,並在所有作業完成、任何作業失敗或所有作業成功完成時調用回調。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM