Laravel自带队列

###
## 第一种方式用表
思想查询出来数据然后暂时把他存到表里面等到有时间再去执行这些逻辑代码
    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'),


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值