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实现消息队列

posted @ 2017-09-26 15:54  程序生(Codey)  阅读(1136)  评论(0编辑  收藏  举报