Laravel5.4 队列简单配置与使用

       首先我不是属于基础扎实的那种,半路出家的那种所以第一次看文档弄的不清不楚,中间又是耽搁了心里有个坎想搞清楚,下面是是我搞清楚后得到的简单应用。

        我这次写的主要是针对Redis的队列操作,因为如果还是用数据库感觉是多此一举,本来就是为了减轻数据库压力的,还用数据库就是脱了裤子放屁。

        首先是安装Redis,对了说一下我这里是本地的,Linux上应该更简单,本地Redis的安装我就直接放一个链接,我用了还蛮靠谱的,https://www.cnblogs.com/PollyLuo/p/9635324.html 

        然后就是实际的来了,如果有用phpstrom的就好了,没有用的也可以直接cmd用命令行到项目根目录下去,要用 database 队列驱动,你需要数据表保存任务信息。要生成创建这些表的迁移,可以运行 Artisan 命令 queue:table,迁移被创建之后,可以使用 migrate 命令生成这些表:

php artisan queue:table

php artisan migrate

执行完上面两条命令,费力打开 config\queue.php, key=default 的数组中使用env配置文件加载方式,laravel安装后默认为sync(同步),我们需要改为异步(你现在可以暂时认为同步!=队列),这里我们选择使用关系型数据库来实现队列,根目录下面有.evn的配置文件需要修改的配置如下

QUEUE_DRIVER=Redis    //队列就可以发送Redis

REDIS_HOST=127.0.0.1  //连接的Redis所在服务器的ip,本次说的实在本地
REDIS_PASSWORD=12345  //redis的密码
REDIS_PORT=6379       //默认的端口

config\queue.php文件里面需要修改的如下

'default' => env('QUEUE_DRIVER', 'redis')

还有就是config\database.php需要修改的如下

'redis' => [

        'client' => 'predis',

        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', '12345'),
            'port' => env('REDIS_PORT', 6379),
            'database' => 0,
        ],

    ],

//虽然.evn里默认的已经写好了不过写上也咩影响啦

以上的事情做好以后前期的工作就算好了,后面就可以生成实际操作需要代码的部分了,为了生成队列任务,先运行命令会生成Jobs\SendReminderEmail.php文件

php artisan make:job SendReminderEmail

然后就是SendReminderEmail.php的编写:

class SendReminderEmail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $name;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($name)//外面发送给队列的参数
    {
        //
        $this->name = $name;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle(){//就是加入条件完成后需要实现的过程
        sleep(3);//为了怕数据库太频繁的操作延迟时间可以随意
        DB::table('email')->insert([//这里需要在默认数据里创建一个‘email’的数据库
            'name' => $this->name,
            'img'=>1,
            'sort'=>1
        ]);
    }
}

还有就是其他的方法的调用实例

class IndexController extends Controller{

    public function index(){
        for ($i = 0; $i <= 100; $i++) {
            dispatch(new SendReminderEmail("testEmail" . $i));
        }

    }
}

以上的完成后就可以运行下面命令行,因为是往Redis里发送所以后面加了Redis,如果还是mysql的话去掉后面的Redis就好了

php artisan queue:work redis

 后面就可以去数据库查看数据是不是正常,还有Redis里面是不是有数据,然后里面具体调用还有需要发送什么数据也都有很多啦,靠大家发散思维,据我的想法这个队里的原理应该是定时任务,不晓得是不是,不是很清楚,我没去理解。不是什么难技术,只是自己当时没看完文档就开跑没搞成后来成功了,说一下,文笔也不好,大家不要介意,若是有帮助当然很好,没有也没关系,就当写个文档读后感了,以后在慢慢努力。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值