1 回答

TA貢獻(xiàn)1719條經(jīng)驗(yàn) 獲得超6個(gè)贊
有很多方法可以做到這一點(diǎn),但你基本上想要的是解耦動(dòng)作觸發(fā)器及其執(zhí)行。
只是:
從控制器中刪除所有繁重的工作。您的控制器最多只應(yīng)檢查客戶端提供的視頻 ID 是否存在于 .
VideoRepository
存在?很好,那么您需要將此“工作訂單”存儲在某個(gè)地方。
有許多解決方案,具體取決于您已經(jīng)安裝的內(nèi)容,您感覺更舒適的技術(shù)等。
為了簡單起見,假設(shè)您有一張帶有 、 和 的表,也許還有 。因此,您的控制器唯一要做的就是在此表中創(chuàng)建一個(gè)新記錄(也許檢查作業(yè)是否尚未“排隊(duì)”,這種詳細(xì)信息取決于您的實(shí)現(xiàn))。
PendingUploads
videoId
status
createdAt
userId
然后返回(或 ,在這種情況下可能更合適
200
202
)
然后,您需要編寫一個(gè)單獨(dú)的進(jìn)程。
很可能是您定期執(zhí)行的控制臺命令(使用最簡單的方法)cron
在每次執(zhí)行時(shí),該進(jìn)程(將具有所有邏輯,并且可能還有一個(gè))將檢查哪些作業(yè)正在等待上傳,按順序處理它們,并設(shè)置為您表示要完成的任何內(nèi)容。例如,您可能必須(掛起)、(處理)和(已處理),并在腳本的每個(gè)步驟上相應(yīng)地設(shè)置狀態(tài)。Google_Client
PendingUploadsRepository
status
status
0
1
2
具體實(shí)現(xiàn)此目的的詳細(xì)信息取決于您。這個(gè)問題過于寬泛和固執(zhí)己見。選擇一些你已經(jīng)理解的東西,讓你移動(dòng)得更快。如果要將作業(yè)存儲在 Rabbit、Redis、數(shù)據(jù)庫或平面文件中,則不是特別重要。如果以 或 開頭的“使用者”。cron
supervisor
Symfony有一個(gè)現(xiàn)成的組件,可以讓你異步解耦這種消息傳遞(Symfony信使),這很不錯(cuò)。調(diào)查它是否是你的一杯茶,盡管如果你不打算在你的應(yīng)用程序中將其用于其他任何事情,我會讓它變得簡單。
- 1 回答
- 0 關(guān)注
- 94 瀏覽
添加回答
舉報(bào)