應用場景
-
1.會員過期前3天發送召回通知
-
2.訂單支付成功後,5分鐘後檢測下游環節是否都正常,比如用戶購買會員後,各種會員狀態是否都設置成功
-
3.如何定期檢查處於退款狀態的訂單是否已經退款成功?
-
4.實現通知失敗,1,3,5,7分鐘重複通知,直到對方回覆?
$post['beginTime'] = Carbon::now()->addMinutes(1);
endTask::dispatch($resPost)->delay($resPost->beginTime);
php artisan make:job endTask --queued
app/jobs endTask :
protected $order;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(Order $order, $delay)
{
//
$this->order=$order;
// 設置延遲的時間,delay() 方法的參數代表多少秒之後執行
$this->delay($delay);
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//延遲執行的業務邏輯
// 判斷對應的訂單是否已經被支付
// 如果已經支付則不需要關閉訂單,直接退出
if ($this->order->paid_at) {
return;
}
// 通過事務執行 sql
\DB::transaction(function() {
// 將訂單的 closed 字段標記爲 true,即關閉訂單
$this->order->update(['closed' => 1]);
// 循環遍歷訂單中的商品 SKU,將訂單中的數量加回到 SKU 的庫存中去
foreach ($this->order->items as $item) {
$item->productSku->addStock($item->amount);
}
});
}
php artisan queue:work --daemon
三種情況:
queue:work
默認只執行一次隊列請求,當請求執行完成後就終止;queue:listen
監聽隊列請求,只要運行着,就能一直接受請求,除非手動終止;queue:work --daemon
同listen
一樣,只要運行着,就能一直接受請求,不一樣的地方是在這個運行模式下,當新的請求到來的時候,不重新加載整個框架
, 而是直接 fire 動作.