laravel 任务队列_laravel 异步队列详解

本文详细介绍了如何在 Laravel 中配置和使用异步队列,包括创建队列任务、调度延迟任务、更改队列驱动为 Redis、安装及使用 predis 包、启动队列工作进程以及处理失败任务的方法,旨在提升应用的响应速度和性能。
摘要由CSDN通过智能技术生成

异步队列:可以大幅度缩短 Web 请求和响应的时间。

注意:本地安装配置redis扩展,且已经启动redis

1、创建队列任务:

php artisan make:job CloseOrder

2、CloseOrder.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 App\Services\Facades\Api\Order\OrderService;

class CloseOrder implements ShouldQueue

{

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

protected $order;//订单信息

public function __construct($order, $delay)

{

$this->order = $order;

// 设置延迟的时间,delay() 方法的参数代表多少秒之后执行

$this->delay($delay);

}

// 当队列处理器从队列中取出任务时,会调用 handle() 方法

public function handle()

{

// 判断对应的订单是否已经被支付

// 如果已经支付则不需要关闭订单,直接退出

if ($this->order['order_status']!=1) {

return;

}

//处理业务逻辑,更改订单状态,更新商品库存等

//处理失败异常抛出

throw new \Exception('取消订单失败:单号:'.$this->order['order_no']);

}

}

3、队列调用:

use App\Jobs\CloseOrder;

dispatch(new CloseOrder($orderData, 30 * 60));//30分钟后自动取消订单

4、更改异步驱动:

在laravel生成的.env文件中将队列驱动由同步sync改为redis

QUEUE_CONNECTION=redis

5、安装predis/predis包

使用redis异步驱动,需要安装predis/predis包

composer require predis/predis

6、启动队列

php artisan queue:work

调用方法:

dispatch_now(new CloseOrder($orderData));//立即异步执行方法

dispatch(new CloseOrder($orderData, 30 * 60));//延迟30分钟后执行方法

失败任务处理:

将失败的任务记录到数据库,命令如下:

php artisan queue:failed-table

php artisan migrate

设置最大尝试次数:

php artisan queue:work redis --tries=3

任务失败后,将最大执行3次,3次后失败任务记录到数据库中、

重新尝试失败任务:

查看失败任务:

php artisan queue:failed

执行命令后将会列出任务 ID ,队列,以及失败的时间。

尝试单个任务:php artisan queue:retry 任务ID

尝试所有失败任务:php artisan queue:retry all

删除失败任务:

删除单个失败任务:php artisan queue:forget 任务ID

删除所有失败任务:php artisan queue:flush

监听任务队列:

php artisan queue:listen

启动队列守护进程:

安装Supervisor

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值