laravel佇列之artisan命令大全,記錄一下
基本佇列artisan命令
queue:佇列 php artisan help queue 幫助 help
php artisan make:job namexxx 建立佇列 會在app/jobs 下生成佇列檔案
php artisan queue:table 生成佇列成功job資料庫遷移
php artisan queue:failed-table 生成佇列失敗fail-job資料庫遷移
php artisan queue:failed 檢視失敗佇列列表
php artisan queue:listen 監聽佇列
php artisan queue:work 執行佇列
php artisan queue:flush 刪除所有佇列
php artisan queue:forget -引數 刪除某個
php artisan queue:retry -引數id 重新執行某個佇列
php artisan queue:restart 重啟所有佇列
--------------------- --------------------- --------------------- --------------------- --------------------- --------------------- ---------------------
一般用法:
$user = Auth::user();
$
this
->dispatch((
new
SendReminderEmail($user))->delay(60));
//delay表示延遲佇列執行
// 也可以將任務推送到不同的佇列中
$
this
->dispatch((
new
SendReminderEmail($user))->onQueue(
'jobs'
));
// 也可以從請求中分發任務
$
this
->dispatchFrom(
'App\Jobs\ProcessOrder'
, $request, [附加的引數]);
最後貼一個簡單的示例:
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/8/20
* Time: 14:08
*/
namespace App\Jobs\order;
use App\Jobs\Job;
use App\Facades\GuzzleHttp;
use App\Models\Log\LogQueueJob;
use App\Models\Order\Order;
use App\Models\Order\OrderGood;
use Illuminate\Support\Facades\Log;
class AddOrderJob extends Job
{
/**
* 接受傳參
* @var
*/
protected $zid;
protected $plat_order_id;
/**
* 最大嘗試次數
* @var int
*/
public $tries = 5;
/**
* 超時時間。
* @var int
*/
public $timeout = 120;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($zid,$plat_order_id)
{
$this ->zid = $zid; //組織id
$this ->plat_order_id = $plat_order_id; //主訂單id
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//主訂單
$data['order'] = Order::getOrderInfo($this ->plat_order_id)->toArray();
if(!empty($data['order'])){
$data['order']['site_order_id'] = $data['order']['id'];
$data['order']['site_id'] = $this ->zid;//組織
unset($data['order']['id']);
}
//子訂單
$data['order_goods'] = OrderGood::getOrderGoodsByOrderId($this ->plat_order_id)->toArray();
if(!empty($data['order_goods']))
foreach ($data['order_goods'] as $val){
$val['site_order_goods_id'] = $val['id'];
$val['site_id'] = $this ->zid;//組織
unset($val['id']);
}
$result = GuzzleHttp::sendRequest('post','/api/order/syncAddOrder',$data);
if($result['code'] !=0){
$msg = '主訂單id為'.$this ->plat_order_id.'同步資料新增失敗:請求路由-"/api/order/syncAddOrder",錯誤碼-'.$result['code'].',錯誤訊息-'.$result['message'].'。失敗的資料為:'.json_encode($data);
Log::info($msg);
LogQueueJob::add($msg);
}
}
/**
* 執行失敗的任務。
*
* @param Exception $exception
* @return void
*/
public function failed(\Exception $e)
{
// 給使用者傳送失敗的通知等等...
Log::info('失敗的訂單資料同步佇列資料:'.$e ->getMessage());
}
}
最後是需要執行的佇列:
//以下事佇列任務,同步sys、資料庫操作
$data = ['plat_order_state'=>-1];
$job_order = new UpdateOrderJob($this->zid,$plat_order_obj->id,$data);
dispatch($job_order ->onQueue('order'));