###
## 第一种方式用表
思想查询出来数据然后暂时把他存到表里面等到有时间再去执行这些逻辑代码
1.如果是用数据表来存的话先建表,默认会生成一张jobs表,这张表是记录失败的不过要配置才会存进去failed_jobs
php artisan queue:table
php artisan migrate
2.生成一个任务件
php artisan make:job SendEmail
3.配置如下
<?php
namespace App\Jobs;
use App\Models\UsersModel;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class SendEmail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
<!-- 定义准备接参数 -->
public $user;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($user)
<!-- { 接参数 -->
$this->user=$user;
}
/**
* Execute the job.
*
* @return void
*/
<!-- 这里要执行的内容 -->
public function handle()
{
Log::info('send remind eamil to'. $this->user);
}
}
4.在queue配置文件里面设置选择databases
<!-- sync是立即执行的意思 -->
'default' => 'database',
5.新建一个控制器调用这个队列
$list = UsersModel::query()->orderByRaw('created_date_time desc')->limit(5)->get();
foreach ($list as $user) {
SendEmail::dispatch($user->real_name);
}
6.执行队列任务
php artisan queue:work
执行任务就会把表里面的数据清空
## 第二种方式用redis
1. 步骤和第一种一样只是选择的时候选择 redis
2.需要安装redis扩展
composer require predis/predis
这只是建立链接一样
然后服务端也要安装这里用phpstudy在上面安装redis包
这样项目才能使用redis
3.如果报错
production.ERROR: Please make sure the PHP Redis extension is installed and enabled
1.选查看 PHP的redis扩展有没有打开
2.在config/database.php文件下的redis配置,将client配置修改成如下
'client' => env('REDIS_CLIENT', 'predis'),
Laravel自带队列
最新推荐文章于 2024-01-12 18:44:12 发布