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'));

猜你喜欢

转载自blog.csdn.net/wuhounuanyangzhao/article/details/83344288
今日推荐