基本队列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'));