直接上代碼了
<?php namespace App\Jobs; use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Mockery\Exception; # php artisan queue:work --queue='隊列名稱,隊列名稱2'; 按照順序處理 開啟 # 調起這個控制器 數據處理完成 傳給指定隊列【前提 隊列已經開啟】 # 隊列進行數據的處理【如 判斷訂單是否滿足過期時間 未支付,未支付撤銷訂單 返回庫存數量】 # 若隊列有問提 在隊列的異常中處理 是否再次進入隊列處理 還是... class task implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; private $data; private $tres; # 最大嘗試次數 private $timeout; # 最大超時時間 /** * Create a new job instance. * * @return void */ public function __construct($data) { // $this->data = $data; } /** * Execute the job. * * @return void */ public function handle() { // 這里沒啥事。就是你的業務邏輯
echo 123;
} /** * 失敗處理 存表 單獨設置定時任務 重新跑 * @param Exception $exception */ public function failed(Exception $exception) { echo 222; var_dump($exception->getMessage()); # 打印錯誤信息 } }
重點是控制器這里 ;
<?php namespace App\Http\Controllers\task; use App\Jobs\task; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class taskController extends Controller { //模擬下單 public function task() { $data = [ 'tid' => date('m-d H:i:s').uniqid(), 'name' => 'ethan', 'address' => 'ethan' ]; $jobs = new task($data); # 把任務放到隊列中 $jobs->dispatch($jobs)->onQueue('task')->delay(5); # ->onQueue()->delay() # onQueue 放入指定隊列中去,如果不加 則redis 會放到默認隊列中。 # delay 延遲的意思。可以實現定時任務 單位秒 # addMinutes(10)); 延遲的時間 單位分鍾 延遲隊列可以做訂單下單 多久未支付 自動取消訂單 恢復庫存的動作 # 以上為 存redis 隊列成功 # 最后執行 php artisan queu e:work --queue='隊列名稱'; return 'ok!'; } }
我這里執行沒有任何問題 因為是前倆天做的 就不貼結果了。
