1 回答

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