隊列異步任務其實並不神秘。我一開始接觸TP框架的隊列功能時,也以為需要寫很多複雜的配置代碼,結果發現官方在最新版本裏已經把流程簡化了不少。簡單來說,隊列就是把耗時任務扔到後台慢慢跑,用戶不用卡在頁麵一直等。
要開始用隊列,你得先確認自己的TP版本是不是支持Queue擴展。打開項目根目錄下的composer.json,看看有沒有require topthink/think-queue。如果沒有,先通過composer安裝這個包,這一步很多新手會忘記,但其實最基礎。
裝好之後別急著寫代碼,先去config目錄下找到queue.php配置文件。這裏麵要設置驅動類型,我建議業務量不大的項目先用redis,簡單又穩定。填好redis連接地址,再設置一個隊列名稱,比如“task_queue”,這樣代碼才知道任務往哪塞。
真正用起來其實就兩步。第一步,創建一個任務類,繼承官方提供的基類,在fire方法裏寫你要執行的業務邏輯,比如發送短信、處理圖片這些。第二步,在控製器裏調用Queue::push方法,把任務對象推送到隊列裏。推完之後,頁麵立刻返回成功。
跑任務的時候別忘了啟動消費端。在命令行執行php think queue:work --queue task_queue,這樣隊列裏的任務才會被真正執行。我建議上線後用supervisor守護這個進程,防止意外終止。
