ThinkAdmin v5.0 增加自定義任務機制,不再依賴於 think-queue 組件。
去除數據表 system_jobs 和 system_jobs_log,增加 system_queue 表。
關於非同步任務處理指令如下:
執行 php think xtask:listen
啟動非同步任務監聽守護主進程
執行 php think xtask:query
查詢正在執行的所有任務進程
執行 php think xtask:start
創建非同步任務監聽守護主進程
執行 php think xtask:state
查看非同步任務監聽主進程狀態
執行 php think xtask:stop
平滑停止非同步任務所有的進程
admin/sys.php 函數增加 sysqueue 函數以方便增加 任務隊列。
sysqueue($title, $loade, $later = 0, $data = [], $double = 1)
可以指定任務的標題,執行任務,延時時間,任務附加數據,允許創建重複任務等。
有些任務,在待處理和處理中是不需要再創建重複任務的,$double 就需要設置為0,這是根據標題來識別的,所以標題也可以適當加上個性名稱。
自建的非同步處理是多進程任務處理,其中 windows 是基於 wmic 指令創建進程實現的,而 linux 則是通過 & 符實現。
因為是非同步並列執行,建議自行控制下任務數據,免得過多消耗系統資源而影響項目正常使用。
在部署時,通常我們只需要創建定時器去執行 php think xtask:start
就可以守護非同步任務監聽進程。
目前,ThinkAmdin V5 自定義非同步任務機制支持兩種規則機制。
一、自定義單獨的處理類,需要繼承 app\admin\queue\Queue
抽象類,實現 execute
方法,參數為 $input, $output, $data
其中 input 為 cli 輸入對象,output 為 cli 輸出對象,而 data 為任務綁定的數據。詳情可以閱讀:https://gitee.com/zoujingli/ThinkAdmin/blob/master/application/wechat/queue/WechatQueue.php
二、自定義 ThinkPHP 指定,默認使用 Console::call() 去嘗試執行傳入的指令。如:
sysqueue("同步[{$this->appid}]粉絲列表",'xfans:all', 0, ['appid' => $this->appid], 0);
關於ThinkAdmin更多用法,請移步 https://gitee.com/zoujingli/ThinkAdmin
[admin
]