• 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同名

  • 相关阅读:
    6、STL、迭代器、容器
    苹果电脑装虚拟机好用吗 苹果电脑装虚拟机要钱吗 Parallels对mac的损害 Parallels占用多大空间 PD19
    接口自动化测试
    洛谷P2456 二进制方程
    VNC远程连接无法打开图形界面应用问题
    同构字符串(简单)
    mysql面试题18:MySQL中为什么要用 B+树,为什么不用二叉树?
    uniapp:打包ios配置隐私协议框
    C# WPF 开发一个 Emoji 表情查看软件
    [全家桶之SpringMVC]SpringMVC 的特点和优势
  • 原文地址:https://blog.csdn.net/qq_30333063/article/details/139435522