laravel 队列是什么

2022-05-15 0 529

laravel中,队列是一种操作受限制的线性表,它只允许在表的前端(队头)进行删除操作,而在表的后端(队尾)进行插入操作;通过队列,开发者可以将耗时任务的处理往后推延,进而可以极大地提升web请求响应速度。

laravel 队列是什么

本教程操作环境:windows7系统、Laravel6版、Dell G3电脑。

laravel中队列的使用

1、什么是队列

队列是一种操作受限制的线性表,特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。

通过队列,你可以将耗时任务 (如发送电子邮件) 的处理往后推延。延迟这些耗时的任务可以极大地提升 web 请求响应速度。

2、优点

解耦:消息队列可以对系统进行解耦,提高响应速度,系统功能向内聚合,对外开放;

异步:消息队列可以对系统异步功能进行剥离,减少功能耦合,提供开发效率;

削峰:消息队列可以削峰限流,确保下游消费者稳定运行;

3、配置

队列配置文件存储在 config/queue.php 中。 在这个文件中,你可以找到框架中包含的每个队列驱动程序的连接配置,其中包括数据库,Beanstalkd,Amazon SQS,Redis,和一个同步驱动程序(sync-供本地使用)。
这里使用 Redis 作为驱动,需要安装好 Redis 以及 相关扩展。

4、任务

我们需要把一些东西放入队列中,我们可以称之为任务。Laravel 框架中创建任务给我们提供了以下命令:

php artisan make:job TestJob

TestJob.php

namespace App\\Jobs;use Illuminate\\Bus\\Queueable;use Illuminate\\Contracts\\Queue\\ShouldBeUnique;use Illuminate\\Contracts\\Queue\\ShouldQueue;use Illuminate\\Foundation\\Bus\\Dispatchable;use Illuminate\\Queue\\InteractsWithQueue;use Illuminate\\Queue\\SerializesModels;use Illuminate\\Support\\Facades\\DB;use Symfony\\Polyfill\\Intl\\Idn\\Info;class TestJob implements ShouldQueue{    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;    /**     * Create a new job instance.     *     * @return void     */    public function __construct()    {        //    }    /**     * Execute the job.     *     * @return void     */    public function handle()    {//        \\Log::info('hhh');        DB::connection('test')            ->table('master')            ->insert([                'name'=>'小白',                'email'=>'123@qq.com'            ]);    }}

5、分发

一旦编写了任务类,就可以使用任务本身的 dispatch 方法来分派它。传递给 dispatch 方法的参数将被传递给任务的构造函数。

onQueue: 指定队列;
onConnection: 指定连接;
delay: 延迟队列;
dispatchNow: 同步调度;

#在路由中简单调用Route::get('queue',function(){        \\App\\Jobs\\TestJob::dispatch();//        \\App\\Jobs\\TestJob::dispatch()->onQueue('qq');    });

运行两次该路由可以看到生成一个名为qq的队列,后面我们对队列进行消费

laravel 队列是什么

6、队列消费

Laravel 有一个队列处理器对新推入队列的任务进行处理。通过 Artisan 命令 queue:work 来启动队列处理器。需要注意的是,一旦 queue:work 命令启动,将一直保持运行,直到它被手动停止或你关闭你的终端:

php artisan queue:work
php artisan queue:work –once 添加参数,消费指定队列

#消费qq队列php artisan queue:work --queue=qq

可以看到数据库中新增了两条数据,并且redis中数据被消费

laravel 队列是什么

laravel 队列是什么

我们再次执行路由

laravel 队列是什么

7、事件队列

队列通常是用来处理延迟任务,事件是业务逻辑处理。Laravel 中的 事件 触发器分发至队列中进行异步业务处理,那么这样之后可以快速做出响应而不用实时等待执行结果之后才能给使用者做出提示消息。
如果需要把事件中的业务存放到队列中去,我们并不需要重新进行队列的分发,直接在对应的监听器中实现 Illuminate\\Contracts\\Queue\\ShouldQueue 接口即可。

创建事件和监听器

php artisan make:event TestEventphp artisan make:listener TestListener

在app\\providers\\EventServiceProvider.php中注册

laravel 队列是什么

TestListener.php

namespace App\\Listeners;use Illuminate\\Contracts\\Queue\\ShouldQueue;use Illuminate\\Queue\\InteractsWithQueue;use Illuminate\\Support\\Facades\\DB;class TestListener implements ShouldQueue{    /**     * Create the event listener.     *     * @return void     */    public function __construct()    {        //    }    /**     * Handle the event.     *     * @param  object  $event     * @return void     */    public function handle()    {        DB::connection('test')            ->table('master')            ->insert([                'name'=>'小黑',                'email'=>'234@qq.com'            ]);    }}

修改路由

Route::get('queue',function(){        //\\App\\Jobs\\TestJob::dispatch();        //指定队列名称        //\\App\\Jobs\\TestJob::dispatch()->onQueue('qq');        return event(new \\App\\Events\\TestEvent());    });

运行路由

laravel 队列是什么

消费队列

php artisan queue:work

laravel 队列是什么

【相关推荐:laravel视频教程】

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

【声明:根据2013年1月30日《计算机软件保护条例》2次修订第17条规定: 为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存 储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬! 鉴于此,也希望大家按此说明研究软件!】
本站所有源码尽量保证原汁原味,如有特殊情况会作出声明及标注,网站资源不做任何二次加密(原版加密除外,不影响程序使用的不会做解密处理),方便您更好的学习参考。 在您的能力范围内,为了大环境的良性发展,请尽可能的选择正版资源。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

即刻码站__国内靠谱的站长资源下载平台 php教程 laravel 队列是什么 https://www.jike1995.com/36045.html

常见问题
  • 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度
查看详情

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务