Lumen开发:结合Redis实现消息队列(1)
1、简介
Lumen队列服务为各种不同的后台队列提供了统一的API。队列允许你推迟耗时任务(例如发送邮件)的执行,从而大幅提高web请求速度。
1.1 配置
.env文件的QUEUE_DRIVER选项决定应用使用的队列“驱动”。
QUEUE_DRIVER可以选择"sync", "beanstalkd", "sqs", "iron", "redis" 五种驱动器。
1. sync是本地调试用的同步驱动器
2. beanstalkd 是一个专业队列服务驱动器:http://kr.github.io/beanstalkd/
3. sqs和iron是国外第三方队列服务
4. 最后一项redis给了我们一个使用redis的理由,这样我们顺便把缓存服务和session服务全部迁移到redis上了。
0. 顺便说一句,session驱动器千万别用mysql,处理时间1S不是梦,哎,看谁呢,说的就是你,1S哥!
1.2 队列驱动预备知识
数据库
为了使用database
队列驱动,需要一张数据库表来存放任务,要生成创建该表的迁移,运行Artisan命令queue:table
,迁移被创建好了之后,使用migrate
命令运行迁移:
php artisan queue:table php artisan migrate
其它队列依赖
下面是以上列出队列驱动需要安装的依赖:
Amazon SQS: aws/aws-sdk-php ~3.0 Beanstalkd: pda/pheanstalk ~3.0 IronMQ: iron-io/iron_mq ~2.0 Redis: predis/predis ~1.0 和 illuminate/redis
其他包安装都还比较正常,不过illuminate/redis在require时就一直。。。
后来发现是版本不兼容的问题,Java,C#的毒终于还是在php上重演了。。。
一言不合,我直接update了,结果还是同一个错误。。。
最后执行了composer require illuminate/redis v5.4.*,嘿嘿,就可以了,真是mmp了
好了,接下来就是愉快的让lumen与redis一起搞事啦!!!心花怒放
首先是bootstrap/app.php
$app->register(Illuminate\Redis\RedisServiceProvider::class); $app->withFacades(); $app->withEloquent();
注册一下Redis的服务供应Illuminate\Redis\RedisServiceProvider::class
然后是config/database.php
'redis' => [ 'cluster' => env('REDIS_CLUSTER', false), 'default' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), 'port' => env('REDIS_PORT', 6379), 'database' => env('REDIS_DATABASE', 0), 'password' => env('REDIS_PASSWORD', null), ], ],
我这边是本地测试环境,所有默认不用改
接下来测试一下
app('redis')->set('lumen', 'Hello, Lumen.'); return app('redis')->get("lumen");
结果输出:Hello, Lumen.
下一篇详细讲Redis实现消息队列