本文已参与「新人创作礼」活动,一起开启掘金创作之路。
准备工作: 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结束,真香!