laravel基于redis队列发送邮件demo

289 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

准备工作: 1.laravel发送邮件正常 2.redis服务开启 laravel链接好redis

1.配置文件 .env

//我们要用redis  这里改成reids
QUEUE_CONNECTION=redis

2.生成任务类 默认情况下,应用程序的所有的可排队任务都被存储在了 app/Jobs 目录中。如果 app/Jobs 目录不存在,当您运行 make:job Artisan 命令时,将会自动创建它。您可以使用 Artisan CLI 来生成一个新的队列任务:

php artisan make:job syncEmail 在这里插入图片描述 打开这个类:在handle里加入我们的队列逻辑:

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        //这里放置事先准备好的发送邮箱任务
        $emial = new EmailController(); 
        $emial->sendText();
    }

3.准备一个控制器分配任务

php artisan make:controller SyncEmailController 在这里插入图片描述

控制器里编写一个简单的分配任务方法:

//类上面use刚刚的任务类
use App\Jobs\syncEmail;

    public function sendSyncEmail(){
    	//人物类的dispatch方法分配任务
        $res = syncEmail::dispatch('这里是个异步'.date('Y-m-d H:is'));
        dd($res);
    }

4.为了演示 绑定一个路由 routes下的web.php 增加路由:

Route::any("/sync","SyncEmailController@sendSyncEmail");

访问这个路由地址: 在这里插入图片描述 接下来我们去redis检验数据: 启动redis-cli客户端: keys * 查阅一下当前redis的存在键

在这里插入图片描述 发现两个键:

laravel_database_queues:default laravel_database_queues:default:notify

type laravel_database_queues:default:notify
type laravel_database_queues:default

在这里插入图片描述 这两个货都是list

llen laravel_database_queues:default:notify llen laravel_database_queues:default 我浏览了三次触发异步: 在这里插入图片描述 lrange laravel_database_queues:default:notify 0 -1 lrange laravel_database_queues:default 0 -1 在这里插入图片描述 以上就是任务在redis中的数据存储形式

5.开启队列监听 执行队列

php artisan queue:work

在这里插入图片描述 任务逐条被执行

同时,测试接收邮箱也接受到了三条新邮件! 在这里插入图片描述

至此,demo结束,真香!