第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

laravel - 在隊(duì)列完成所有作業(yè)后運(yùn)行任務(wù)

laravel - 在隊(duì)列完成所有作業(yè)后運(yùn)行任務(wù)

PHP
白豬掌柜的 2023-05-26 16:10:17
我需要為一個可以達(dá)到數(shù)千個項(xiàng)目的列表運(yùn)行一個任務(wù)。為了避免長時間運(yùn)行單個作業(yè),我創(chuàng)建了一個作業(yè)來對所有項(xiàng)目進(jìn)行排隊(duì)。問題是我需要在該隊(duì)列完成之前和之后運(yùn)行另一個任務(wù)。我看到的解決方案是使用延遲:$schedule->job(new \App\Jobs\PauseSystem())     ->hourly('00:01');$schedule->job(new \App\Jobs\EnqueueAllItems()) ->hourly('00:02'); // adds all items as separated job in a queue$schedule->job(new \App\Jobs\ReopenSystem())    ->hourly('55:00');這樣我就有時間00:02確保55:00所有項(xiàng)目都已完成。它看起來不安全,可能會導(dǎo)致工作重疊。在隊(duì)列完成所有作業(yè)后,有沒有更安全的方法來運(yùn)行任務(wù)?
查看完整描述

1 回答

?
智慧大石

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個贊

既然你提到有并行和多個作業(yè),下面是我們解決類似問題的方法。我們有一個報(bào)告系統(tǒng)來準(zhǔn)備來自多個客戶的報(bào)告。有超過1000名客戶。

  • 每個ReportPusher工作負(fù)責(zé)一個客戶

  • 在這項(xiàng)工作中,我們從不同的數(shù)據(jù)庫獲取報(bào)告并將所有數(shù)據(jù)推送到存儲桶(redis 列表)。

  • 如果所有工作(有時是 99% 的工作)都完成工作,另一個ReportCollector工作應(yīng)該完成它的工作。

  • 從單個存儲桶中獲取所有數(shù)據(jù)、格式化、創(chuàng)建 excel 并發(fā)送電子郵件。- 此收集器作業(yè)必須在所有ReportPusher作業(yè)完成后運(yùn)行。

我們是怎么做的;

  • ReportPusher同時觸發(fā)所有作業(yè)

  • 在某個地方設(shè)置觸發(fā)作業(yè)的總數(shù)(例如 redis 鍵)$total

  • n分鐘后觸發(fā)ReportCollector(可能是15分鐘)

  • 每個ReportPusher作業(yè)在完成其過程時都會增加另一個鍵$incremented

  • 15分鐘后ReportCollector工作時,做這些;

    • 如果total等于incremented count讓 ReportCollector 起作用

    • 如果不是,則以 t 延遲(由您決定)+ 增加嘗試觸發(fā)相同的作業(yè)

    • 在 n 次嘗試(您決定)之后,如果計(jì)數(shù)仍然不匹配(我上面提到的 %99),則計(jì)算報(bào)告。

如果一個/兩個客戶出現(xiàn)錯誤,此回退策略是為了防止完全失敗。我們不會僅僅因?yàn)橐粋€/兩個客戶而丟棄所有計(jì)算數(shù)據(jù)(客戶的 %99)。您可以放置一些警報(bào)/錯誤跟蹤系統(tǒng)以在以后修復(fù)損壞的數(shù)據(jù)。


查看完整回答
反對 回復(fù) 2023-05-26
  • 1 回答
  • 0 關(guān)注
  • 156 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號