laravel mysql 队列_Laravel 队列queue(database篇)

本文详细介绍了如何在 Laravel 中使用数据库驱动的队列服务,包括配置文件修改、创建任务类、推送任务到队列、运行队列监听器以及处理队列中的失败任务。通过队列可以提高应用程序性能,延迟执行耗时操作,如发送邮件。
摘要由CSDN通过智能技术生成

队列

Laravel队列服务为各种不同的后台队列提供统一的API

允许推迟耗时任务(例如发送邮件)的执行,从而大幅提高web请求速度

配置文件

Config/queue.php(此文件无需更改)

支持模式 Supported: "sync", "database","beanstalkd", "sqs", "redis", 此次已database为例

//默认选择的是同步驱动

'default' =>env('QUEUE_DRIVER', 'sync'),

env(更改为database驱动)

QUEUE_DRIVER=database

实现步骤

队列存储需要的数据表

可以执行以下操作命令,生成队列所需要的数据表jobs

php artisan queue:table

php artisan migrate

编写任务类

php artisan make:job SendEmail

这时会在app/jobs目录下生成SendEmail.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 Mail;

class SendEmail implements ShouldQueue

{

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

/**

* Create a new job instance.

*

* @return void

*/

public function __construct()

{

//

}

/**

* Execute the job.

*

* @return void

*/

public function handle()

{

Mail::raw('邮件内容', function($message) {

//收件人

$message->to($this->email);

});

}

}

将需要在在队列中完成的操作写入 handle()方法中。

推送任务到队列

可以在Controller中推送任务

public function queue()

{

//dispatch 已经基础controller里已经引用

dispatch(new SendEmail('…………@qq.com'));

}

还有比较常用的是Model::saved()中推送任务

public function saved(User $user)

{

dispatch(new SendEmail('…………@qq.com'));

}

当我们执行完消息推送之后,数据库jobs表中会多一条数据

运行队列监听器(实现任务按队列运行)

(1). listen

php artisan queue:listen

// 监听指定的队列

// --queue 被监听的队列

// --delay 给执行失败的任务设置延时时间 (默认为零: 0)

// --memory 内存限制大小,单位为 MB (默认为: 128)

// --timeout 指定任务运行超时秒数 (默认为: 60)

// --sleep 等待检查队列任务的秒数 (默认为: 3)

// --tries 任务记录失败重试次数 (默认为: 0)

php artisan queue:listen [--queue[="..."]] [--delay[="..."]] [--memory[="..."]] [--timeout[="..."]] [--sleep[="..."]] [--tries[="..."]] [connection]

(1). work

php artisan queue:work --daemon

// 处理下一个队列任务

// --queue 被监听的队列

// --daemon 在后台模式运行

// --delay 给执行失败的任务设置延时时间 (默认为零: 0)

// --force 强制在「维护模式下」运行

// --memory 内存限制大小,单位为 MB (默认为: 128)

// --sleep 当没有任务处于有效状态时, 设置其进入休眠的秒数 (默认为: 3)

// --tries 任务记录失败重试次数 (默认为: 0)

注:一般测试开发用listen,线上用work,有兴趣的同学可以自己研究一下 区别

队列中的任务处理失败

生成存储失败队列的数据表

php artisan queue:failed-table

php artisan migrate

操作执行错误的记录

查看所有错误php artisan queue:failed

执行错误ID为1的记录 php artisan queue:retry 1

执行所有错误php artisan queue:retry all

删除错误ID为4的记录 php artisan queue:forget failed 4

删除所有错误 php artisan queue:forget flush

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值