• Laravel框架进阶:掌握队列系统,优化应用性能


    Laravel使用队列处理

    本文主要讲述如何利用 Laravel 框架的队列系统来管理异步任务和设置周期性执行的任务,从而增强应用程序的效能和可靠性。

    Laravel队列的优势

    异步执行:将任务添加到队列中后,可以立即返回响应给用户,而任务会在后台异步执行。

    提高并发:由于任务被放入队列,可以同时处理多个任务,提高了应用的并发处理能力。

    容错处理:当任务执行失败时,Laravel会将任务重新放入队列,确保任务能够被成功执行。

    安全稳定:通过将任务放入队列,能够避免一些敏感操作或者耗时操作阻塞正常的请求流程。

    微服务化支持:可以通过队列服务与其他微服务进行解耦合,提高应用的可扩展性。

    配置驱动

    根目录 config 文件夹下 queue.php ,配置 redis 驱动

    //框架默认驱动我们设置为redis
    'default' => env('QUEUE_CONNECTION', 'redis'),
    //connections里面有多种驱动 文件 数据库 redis,这里我们使用redis 
    'redis' => [
    	'driver' => 'redis',
    	'connection' => 'default',
    	'queue' => env('REDIS_QUEUE', 'default'),
    	'retry_after' => env('QUEUE_RETRY_AFTER',90),
    	'block_for' => null,
    	'after_commit' => false,
    ],
    

    使用队列

    使用 Laravel 自带的 Artisan 命令创建任务类

    php artisan make:job Test
    

    组装任务类

    
    
    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;
    
    class Test implements ShouldQueue
    {
        use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
        
        protected $test;
        /**
         * Create a new job instance.
         *
         * @return void
         */
        public function __construct($test)
        {
            $this->test = $test;
        }
    
        /**
         * Execute the job.
         *
         * @return void
         */
        public function handle()
        {
            //处理队列的逻辑
            echo $this->test;
        }
    }
    
    

    使用队列的 dispatch 方法来将任务分发到队列中,等待异步处理

        //传入任务类需要的参数
       Test::dispatch($test);
    

    启动队列,设置需要启动的队列名称,tries=3 是指队列失败后重试三次

    php artisan queue:work --queue=test --tries=3
    

    防止队列在后台被杀死,我们可以安装 supervisor 然后配置队列命令即可

    在这里插入图片描述

    注: 每次修改队列代码后,需要重新启动队列不然代码不生效,这个坑是大家非常容易遇到的

    结论

    Laravel的队列处理可以显著提升应用程序的并发性和用户体验,通过异步执行耗时任务,使用户响应更快。

    – 欢迎点赞、关注、转发、收藏【我码玄黄】,gonghao同名

  • 相关阅读:
    MySql运维篇---009:分库分表:垂直拆分、水平拆分、通过MyCat进行分片,读写分离:一主一从、 双主双从
    关于Elasticsearch(es)中使用sql返回结果只有1000条
    链表(数据结构、C语言、单链表、带头双向循环链表)
    代码随想录31——贪心:贪心算法理论基础、455分发饼干、376摆动序列
    [一篇读懂]C语言八讲:数据结构概述
    JavaScript基础:数据类型
    凭借32量子比特!Rigetti Computing打入英国量子计算市场
    我的创作纪念日,3周年总结
    关系数据理论
    如何3分钟,快速开发一个新功能
  • 原文地址:https://blog.csdn.net/qq_30333063/article/details/139435522