广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >Laravel使用Queue队列的技巧汇总
  • 231
分享到

Laravel使用Queue队列的技巧汇总

laravelphp开发语言 2023-09-02 13:09:35 231人浏览 独家记忆
摘要

Laravel 队列为不同的后台队列服务提供统一的 api,例如 Beanstalk,Amazon SQS,Redis,甚至其他基于关系型数据库的队列。队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短 WEB 请求和相应的时间

Laravel 队列为不同的后台队列服务提供统一的 api,例如 Beanstalk,Amazon SQS,Redis,甚至其他基于关系型数据库的队列。队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短 WEB 请求和相应的时间。

队列配置文件存放在 config/queue.PHP 。每一种队列驱动的配置都可以在该文件中找到,包括数据库,Beanstalkd ,Amazon SQS,Redis,以及同步(本地使用)驱动。其中还包含了一个 null 队列驱动用于那些放弃队列的任务

1,为什么使用队列?

一般来说使用队列是为了:

1,异步,

2,重试

也许你还有其他的理由使用队列,但是这应该是最基本的两个原因。

耗时比较久的,比如上传一个文件后进行一些格式的转化等。

需要保证送达率的,比如发送短信,因为要调用别人的 api,总会有几率失败,那么为了保证送达,重试就必不可少了。

使用队列的时候一定要想明白一个问题,这个任务到底是不是可以异步,如果因为异步会导致问题,那么就要放弃使用队列。

2,驱动的必要设置

database.php

在 database.php 配置文件中对 redis 数据库部分进行配置,默认有一个 default 连接,就用这个好了:)
根据这个默认连接中需要的配置项,编辑 .env 配置文件,将其中的 REDIS_HOST、REDIS_PASSWord、REDIS_PORT 填写成自己服务器中 Redis 的相应值。

queue.php

首先需要去 .env 中配置 QUEUE_DRIVER,因为现在打算用 Redis,所以配置成 redis。

接着配置 queue.php 里 connections 部分的 redis 连接,其中 connection 对应的值就是 database.php 中 redis 的那个 default 连接。

数据库

要使用 database 这个队列驱动的话,你需要创建一个数据表来存储任务。

你可以用 queue:table 这个 Artisan

php artisan queue:table

处理失败的任务

有时候你队列中的任务会失败。不要担心,本来事情就不会一帆风顺。

Laravel 内置了一个方便的方式来指定任务重试的最大次数。当任务超出这个重试次数后,它就会被插入到 failed_jobs 数据表里面。要创建 failed_jobs 表的迁移文件,你可以用 queue:failed-table 命令,接着使用 migrate Artisan 命令生成 failed_jobs 表:

php artisan queue:failed-table

当迁移创建好以后,就可以用 migrate 这条命令来创建数据表:

php artisan migrate

3,执行命令讲解

php artisan queue:work --daemon --quiet --queue=default --delay=3 --sleep=3 --tries=3

--daemon 
queue:work Artisan命令包含一个--daemon选项,用于强制队列工作者继续处理作业,而不必重新启动框架。与queue:listen命令相比,这会显著降低CPU使用率
总体来说,在 supervisor 中一般要加这个 option,可以节省 CPU 使用。

--quiet
不输出任何内容


--delay=3
一个任务失败后,延迟多长时间后再重试,单位是秒。这个值的设定我个人建议不要太短,因为一个任务失败(比如网络原因),重试时间太短可能会出现连续失败的情况。


--sleep=3
去 Redis 中拿任务的时候,发现没有任务,休息多长时间,单位是秒。这个值的设定要看你的任务是否紧急,如果是那种非常紧急的任务,不能等待太长时间。


--tries=3
定义失败任务最多重试次数。这个值的设定根据任务的重要程度来确定,一般 3 次比较适合。

4,创建任务

生成任务类

在你的应用程序中,队列的任务类都默认放在 app/Jobs 目录下。如果这个目录不存在,那当你运行 make:job Artisan 命令时目录就会被自动创建。你可以用以下的 Artisan 命令来生成一个新的队列任务:

php artisan make:job Demo

生成的类实现了 Illuminate\Contracts\Queue\ShouldQueue 接口,这意味着这个任务将会被推送到队列中,而不是同步执行。

param = $param; }  public function handle() { Log::info('Hello, '.$this->param); }}

控制器代码

public function queue_demo(){ $num = rand(1,999999999); // 这个任务将被分发到默认队列... DemoJob::dispatch($num);}

5,开启队列

php artisan queue:work --queue=default

由于是本地,需要打开监听,当访问到接口时,就会触发队列中的任务

线上的话需要用到supervisor的配置

6,Supervisor 配置

安装 Supervisor

Supervisor 是一个 linux 操作系统上的进程监控软件,它会在 queue:listen 或 queue:work 命令发生失败后自动重启它们。在 ubuntu 安装 Supervisor,可以用以下命令:

sudo apt-get install supervisor

{tip} 如果自己手动配置 Supervisor 听起来有点难以应付,可以考虑使用 Laravel Forge,它能给你的 Laravel 项目自动安装与配置 Supervisor。

配置 Supervisor

Supervisor 的配置文件一般是放在 /etc/supervisor/conf.d 目录下。在这个目录中你可以创建任意数量的配置文件来要求 Supervisor 怎样监控你的进程。例如我们创建一个 laravel-worker.conf 来启动与监控一个 queue:work 进程:

[program:laravel-worker]process_name=%(program_name)s_%(process_num)02dcommand=php /home/forge/app.com/artisan queue:work sqs --sleep=3 --tries=3autostart=trueautorestart=trueuser=forgenumprocs=8redirect_stderr=truestdout_logfile=/home/forge/app.com/worker.log

这个例子里的 numprocs 命令会要求 Supervisor 运行并监控 8 个 queue:work 进程,并且在它们运行失败后重新启动。当然,你必须更改 command 命令的 queue:work sqs ,以显示你所选择的队列驱动。

启动 Supervisor 当这个配置文件被创建后,你需要更新 Supervisor 的配置,并用以下命令来启动该进程:

sudo supervisorctl rereadsudo supervisorctl updatesudo supervisorctl start laravel-worker:*

来源地址:https://blog.csdn.net/u012322399/article/details/127652615

--结束END--

本文标题: Laravel使用Queue队列的技巧汇总

本文链接: https://www.lsjlt.com/news/390806.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Laravel使用Queue队列的技巧汇总
    Laravel 队列为不同的后台队列服务提供统一的 API,例如 Beanstalk,Amazon SQS,Redis,甚至其他基于关系型数据库的队列。队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短 Web 请求和相应的时间...
    99+
    2023-09-02
    laravel php 开发语言
  • Android使用EditText小技巧汇总
    目录1、隐藏android中EditText自带的的下划线2、让软键盘出现搜索按钮3、多行EditText的时候会出现光标在中间的问题:4、修改EditText的光标颜色5、通过监听...
    99+
    2022-11-12
  • C# TreeView控件使用技巧汇总
    目录前言1.TreeView控件使用1.1 TreeView控件常用的属性1.2 创建窗体文件并修改名称2.设计界面3.添加和删除数据3.1 点击treeView编辑结点3.2 在T...
    99+
    2022-11-13
    C# TreeView控件技巧 C# TreeView控件
  • C++超细致讲解队列queue的使用
    目录queue介绍queue常用函数1.常用函数2.函数运用示例queue介绍 只能访问 queue<T> 容器适配器的第一个和最后一个元素。只能在容器的末尾添加新元素,...
    99+
    2022-11-13
  • 一些常用的Python爬虫技巧汇总
    Python爬虫:一些常用的爬虫技巧总结 爬虫在开发过程中也有很多复用的过程,这里总结一下,以后也能省些事情。 1、基本抓取网页 get方法 import urllib2 url "http://w...
    99+
    2022-06-04
    爬虫 常用 技巧
  • Vue项目中常用的实用技巧汇总
    目录前言1. 使用 $attrs 和 $listeners 进行多层级的数据和事件传递2. 实现数据的双向绑定,方便维护数据使用 .sync 实现 Prop 的“双向绑定”使用 mo...
    99+
    2022-11-12
  • MySQL使用的常见问题解决与应用技巧汇总
    前言 在MySQL日常开发或者是维护中,有一些问题或是故障往往是难以避免的,如丢失密码、表损坏。在此总结一下常见的问题,以备今后所需。 一、 忘记 MySQL 的 root 密码 1. 登录到数据库所在的...
    99+
    2022-10-18
  • Golang中使用RabbitMQ实现任务队列的优化技巧
    在Golang中使用RabbitMQ实现任务队列时,可以使用以下技巧进行优化:1. 使用消息确认机制:在消费者处理完任务后,手动确认...
    99+
    2023-10-08
    Golang
  • Python的线程使用队列Queue来改造转账场景
    目录一、看看转账场景的问题二、这种问题怎么使用队列来解决呢?三、总结前篇我们了队列Queue和转账场景这次趁热学委展示一下使用队列解决转账场景的问题。 一、看看转账场景的问题 前面有...
    99+
    2022-11-13
  • 使用Laravel的一些小技巧
    这篇文章给大家分享的是有关使用Laravel的一些小技巧的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Laravel 是什么Laravel 是一套简洁、优雅的PHP Web开发框架。它可以让你从面条一样杂乱的代码...
    99+
    2023-06-14
  • Java自带消息队列Queue的使用教程详细讲解
    目录阻塞队列和非阻塞队列非阻塞队列阻塞队列抛出异常特殊值阻塞超时总结阻塞队列和非阻塞队列 非阻塞队列 ConcurrentLinkedQueue 单向链表结构的无界并发队列, 非阻塞...
    99+
    2023-05-20
    Java自带消息队列Queue Java Queue Java消息队列
  • java序列化与反序列化的使用方法汇总
    一、概念        java对象序列化的意思就是将对象的状态转化成字节流,以后可以通过这些值再生成相同状态的对象。对象...
    99+
    2022-11-12
  • 分析五个Laravel Dusk的使用技巧
    目录1. 填充隐藏字段2. 模拟 HTML 地理位置3. 使用 XPath 选择器4. 整页截屏5. 访问浏览器错误日志1. 填充隐藏字段 在测试某些 JS 组件时 (例如自动完成,...
    99+
    2022-11-12
  • Golang中使用RabbitMQ实现分布式任务队列的性能调优技巧
    在Golang中使用RabbitMQ实现分布式任务队列时,可以采取以下性能调优技巧:1. 使用持久化队列和消息:通过将队列和消息标记...
    99+
    2023-10-10
    Golang
  • Android中Glide库的使用小技巧总结
    简介在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide 的图片加载库,作者是bumptech。这个库被广泛的运用在google的开源项目中,包括2014年google I/O大会上发布的官方app。https://githu...
    99+
    2023-05-30
    android glide库 使用技巧
  • 简述thinkphp自带队列think-queue的使用以及通过supervisor实现常驻进程
    think-queue是thinkphp官方提供的一个消息队列服务,适用于大并发、返回结果时间较长、需要批量操作等专门支持队列服务的扩展包。例如短信发送、模板消息邮件等推送。可以进行发布、获取、执行、...
    99+
    2023-09-07
    linux php redis
  • Laravel 框架中 ASP 缓存的使用技巧分享。
    Laravel 框架中 ASP 缓存的使用技巧分享 在 Laravel 框架中, ASP 缓存是一个非常重要的组件,它可以大大提高网站的访问速度。ASP 缓存是一种内存缓存,它可以将经常访问的数据缓存在内存中,当用户再次访问该数据时,直接从...
    99+
    2023-06-08
    缓存 linux laravel
  • dos批处理命令的使用技巧总结
    本篇内容介绍了“dos批处理命令的使用技巧总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!截取字符串: set var=10203040 ...
    99+
    2023-06-08
  • 81个必看的Win8使用技巧大总部
    Windows8新一代操作系统已经发布了,现在有一部分偿鲜的网虫开始使用了,但因为现在市场上还没有合适的教程,就是在图书馆里找一本像样的Win8教材都找不到,今天在逛网的时候找到一个收集必看的81个Win8...
    99+
    2022-06-04
    必看 使用技巧 总部
  • 有哪些高级的Python列表使用技巧
    本篇内容介绍了“有哪些高级的Python列表使用技巧”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、使用Python过滤列表1.使用Fil...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作