1、在.env文件中进行配置(默认为异步,数据库)
QUEUE_CONNECTION=database
2、生成队列表
php artisan queue:table
执行
php artisan migrate
3、数据库中会生成jobs和failed_jobs两张表
jobs存放未执行的队列
failed_jobs存放执行失败的队列
4、生成Job类(位于app\Jobs\SendEmailJob.php)
php artisan make:job SendEmailJob
编辑(在handle里面写业务逻辑,比如发送邮件、发送短信、发送微信模板消息)
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class SendEmailJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
private $email;
public function __construct($email)
{
$this->email = $email;
}
public function handle()
{
Email::send($this->email);
}
}
5、在业务逻辑中使用(比如向所有用户发送优惠信息邮件)
foreach(User::select(['email'])->pluck('email')->toArray() as $email){
dispatch(SendEmailJob($email));
}
注:此步并不会发送邮件,只是把发送邮件添加到队列里面,此时打开jobs表,会发现记录
6、运行队列
php artisan queue:work
队列开始执行,当队列执行完毕时,jobs表为空,如果有执行失败的条目,将会存到failed_jobs表里面
此外,可用supervison守护进程
7、宝塔面板使用supervison守护队列进程
7.1、宝塔面板-软件-supervison-安装
7.2、打开,添加守护进程
名称:test
启动用户:root或者www
运行目录:/www/wwwroot/abc.com (项目根目录)
启动命令:/www/server/php/74/bin/php artisan queue:work
进程数量:1
7.3、点击创建,会自动启动该命令