laravel框架中队列的用法介绍(附代码)

本篇文章给大家带来的内容是关于laravel框架中队列的用法介绍(附代码) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

在实际的项目开发中,我们经常会遇到需要轻量级队列的情形,例如发短信、发邮件等,这些任务不足以使用 kafka、RabbitMQ 等重量级的消息队列,但是又的确需要异步、重试、并发控制等功能。通常来说,我们经常会使用 Redis、Beanstalk、Amazon SQS 来实现相关功能,laravel 为此对不同的后台队列服务提供统一的 API,本文将会介绍应用最为广泛的 redis 队列。

在讲解 laravel 的队列服务之前,我们要先说说基于 redis 的队列服务。首先,redis设计用来做缓存的,但是由于它自身的某种特性使得它可以用来做消息队列

redis 队列的数据结构

List 链表

redis 做消息队列的特性例如FIFO(先入先出)很容易实现,只需要一个 list 对象从头取数据,从尾部塞数据即可。

相关的命令:(1)左侧入右侧出:lpush/rpop;(2)右侧入左侧出:rpush/lpop。

这个简单的消息队列很容易实现。

Zset 有序集合

有些任务场景,并不需要任务立刻执行,而是需要延迟执行;有些任务很重要,需要在任务失败的时候重新尝试。这些功能仅仅依靠 list 是无法完成的。这个时候,就需要 redis 的有序集合。

Redis 有序集合和 Redis 集合类似,是不包含相同字符串的合集。它们的差别是,每个有序集合的成员都关联着一个评分 score,这个评分用于把有序集合中的成员按最低分到最高分排列。

单看有序集合和延迟任务并无关系,但是可以将有序集合的评分 score 设置为延时任务开启的时间,之后轮询这个有序集合,将到期的任务拿出来进行处理,这样就实现了延迟任务的功能。

对于重要的需要重试的任务,在任务执行之前,会将该任务放入有序集合中,设置任务最长的执行时间。若任务顺利执行完毕,该任务会在有序集合中删除。如果任务没有在规定时间内完成,那么该有序集合的任务将会被重新放入队列中。

相关命令:

(1) ZADD 添加一个或多个成员到有序集合,或者如果它已经存在更新其分数。

(2) ZRANGEBYSCORE 按分数返回一个成员范围的有序集合。

(3) ZREMRANGEBYRANK 在给定的索引之内删除所有成员的有序集合。

laravel 队列服务的任务调度

队列服务的任务调度过程如下:

3775237609-5b82315cd8ef7_articlex.png

laravel 的队列服务由两个进程控制,一个是生产者,一个是消费者。这两个进程操纵了 redis 三个队列,其中一个 List,负责即时任务,两个 Zset,负责延时任务与待处理任务。

生产者负责向 redis 推送任务,如果是即时任务,默认就会向 queue:default 推送;如果是延时任务,就会向 queue:default:delayed 推送。

消费者轮询两个队列,不断的从队列中取出任务,先把任务放入 queue:default:reserved 中,再执行相关任务。如果任务执行成功,就会删除 queue:default:reserved 中的任务,否则会被重新放入 queue:default:delayed 队列中。

laravel 队列服务的总体流程

任务分发流程:

569806889-5b82317a61db7_articlex.png

任务处理器运作:

2645669880-5b82319344102_articlex.png

创建任务

queue 设置

'redis' => [        'driver' => 'redis',        'connection' => 'default',        'queue' => 'default',        'retry_after' => 90,    ],

在config/queue.php中进行配置
一般来说,默认的 redis 配置如上,connection 是 database 中 redis 的连接名称;queue 是 redis 中的队列名称,值得注意的是,如果使用的是 redis 集群的话,这个需要使用 key hash tag,也就是 {default};当任务运行超过 retry_after 这个时间后,该任务会被重新放入队列当中。

任务类的创建

任务类的结构很简单,一般来说只会包含一个让队列用来调用此任务的 handle 方法。

如果想要使得任务被推送到队列中,而不是同步执行,那么需要实现 IlluminateContractsQueueShouldQueue 接口。

如果想要让任务推送到特定的连接中,例如 redis 或者 sqs,那么需要设置 conneciton 变量。

如果想要让任务推送到特定的队列中去,可以设置 queue 变量。

如果想要让任务延迟推送,那么需要设置 delay 变量。

如果想要设置任务至多重试的次数,可以使用 tries 变量;

如果想要设置任务可以运行的最大秒数,那么可以使用 timeout 参数。

如果想要手动访问队列,可以使用 trait : IlluminateQueueInteractsWithQueue。

任务的分发
分发服务
写好任务类后,就能通过 dispatch 辅助函数来分发它了。唯一需要传递给 dispatch 的参数是这个任务类的实例:

class PodcastController extends Controller{    public function store(Request $request)    {        // 创建播客...        ProcessPodcast::dispatch($podcast);    }}

如果想延迟执行一个队列中的任务,可以用任务实例的 delay 方法。

 ProcessPodcast::dispatch($podcast)                ->delay(Carbon::now()->addMinutes(10));

通过推送任务到不同的队列,可以给队列任务分类,甚至可以控制给不同的队列分配多少任务。要指定队列的话,就调用任务实例的 onQueue 方法:

ProcessPodcast::dispatch($podcast)->onQueue('processing');

如果使用了多个队列连接,可以将任务推到指定连接。要指定连接的话,可以在分发任务的时候使用 onConnection 方法:

ProcessPodcast::dispatch($podcast)->onConnection('redis');

以上就是laravel框架中队列的用法介绍(附代码)的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/112877.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月23日 23:33:16
下一篇 2025年11月24日 00:18:07

相关推荐

  • 用了一个星期的S25 Ultra,我有这些体验想和你分享一下

    三星galaxy s25 ultra:轻薄机身与ai赋能的完美融合 “均衡的手机千篇一律,有趣的手机万里挑一。”在手机市场同质化竞争日益激烈的今天,这句话或许道出了许多消费者的内心呼声。然而,三星Galaxy S系列却始终凭借其均衡的配置和体验,成为市场上的佼佼者。而全新发布的三星Galaxy S2…

    2025年12月6日 硬件教程
    000
  • 荣耀开始安排 6.3-6.5 英寸中小尺寸机型?两款新机曝光

    荣耀将推出中小尺寸屏幕新机型!据数码闲聊站爆料,荣耀计划发布两款中端机型,分别采用6.5英寸左右1.5k直屏和6.78英寸左右1.5k等深四曲屏,均配备7000毫安时以上大电池,并搭载骁龙7 gen 4处理器(sm7750),预计上半年发布。 爆料显示,荣耀正在积极布局中小尺寸手机市场,目前已启动6…

    2025年12月6日 硬件教程
    000
  • 传真我开始测试 2K OLED 直屏 支持超声波 新旗舰搭载?

    realme真我或将推出搭载2k ltps直屏的旗舰新机!数码闲聊站爆料称,realme真我正在测试一块约6.78英寸的2k ltps直屏,并支持3d超声波指纹识别和金属中框。这块屏幕有望应用于下一代真我旗舰手机,弥补此前旗舰机型在屏幕方面的不足。 回顾2024年11月发布的realme GT 7 …

    2025年12月6日 硬件教程
    000
  • 小米 POCO C71 将在 4 月 4 日发布:金色机身 颜值在线!

    poco c71海外发布在即:6.88英寸大屏,3200万像素双摄 近日,CNMO获悉,小米旗下子品牌POCO即将于4月4日正式发布其全新机型POCO C71。这款手机将提供酷冷蓝、力量黑和沙漠金三种时尚配色,其中金色版本尤为吸睛。 POCO C71外观设计 POCO C71配备一块6.88英寸高清…

    2025年12月6日 硬件教程
    000
  • AO3镜像站备用镜像网址_AO3镜像站快速访问官网

    AO3镜像站备用网址包括ao3mirror.com和xiaozhan.icu,当主站archiveofourown.org无法访问时可切换使用,二者均同步更新内容并支持多语言检索与离线下载功能。 AO3镜像站备用镜像网址在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来AO3镜像站快速访问官…

    2025年12月6日 软件教程
    000
  • Pboot插件缓存机制的详细解析_Pboot插件缓存清理的命令操作

    插件功能异常或页面显示陈旧内容可能是缓存未更新所致。PbootCMS通过/runtime/cache/与/runtime/temp/目录缓存插件配置、模板解析结果和数据库查询数据,提升性能但影响调试。解决方法包括:1. 手动删除上述目录下所有文件;2. 后台进入“系统工具”-“缓存管理”,勾选插件、…

    2025年12月6日 软件教程
    000
  • vivo Y300 Pro+评测:同档续航最强?

    作为vivo y系列十四周年纪念机型,y300 pro+以“样样加倍”的理念重新定义了中端机的标准。 为了解并解决用户的痛点,进一步巩固“国民手机”的定位,Y300 Pro+携“续航灭霸”的称号进入中端手机市场。 vivo Y300 Pro+肩负着“续航最强的全能国民手机”的使命,向同级别竞争对手发…

    2025年12月6日 硬件教程
    000
  • 怎样用免费工具美化PPT_免费美化PPT的实用方法分享

    利用KIMI智能助手可免费将PPT美化为科技感风格,但需核对文字准确性;2. 天工AI擅长优化内容结构,提升逻辑性,适合高质量内容需求;3. SlidesAI支持语音输入与自动排版,操作便捷,利于紧急场景;4. Prezo提供多种模板,自动生成图文并茂幻灯片,适合学生与初创团队。 如果您有一份内容完…

    2025年12月6日 软件教程
    000
  • JetBrains 发布 Junie AI 编程智能体 可执行编写调试等多步任务

    近日,jetbrains 正式宣布,其 ai 编程智能体 junie ai 已达到 ” 生产就绪 ” ( production-ready ) 状态。这意味着 junie ai 已经具备执行编写代码、调试运行等多步骤任务的能力,为开发者提供强大的 ai 支持。与此同时,jet…

    2025年12月6日 硬件教程
    000
  • Pages怎么协作编辑同一文档 Pages多人实时协作的流程

    首先启用Pages共享功能,点击右上角共享按钮并选择“添加协作者”,设置为可编辑并生成链接;接着复制链接通过邮件或社交软件发送给成员,确保其使用Apple ID登录iCloud后即可加入编辑;也可直接在共享菜单中输入邮箱地址定向邀请,设定编辑权限后发送;最后在共享面板中管理协作者权限,查看实时在线状…

    2025年12月6日 软件教程
    000
  • 各种手机处理器性能排行榜2025 全品牌手机性能处理器前十名推荐

    2025年全品牌手机性能处理器前十名分别是:1.联发科天玑9400 ,2.苹果A18 Pro,3.高通骁龙8至尊版,4.联发科天玑9300,5.高通骁龙8 Gen4,6.三星Exynos 2500,7.苹果A18 Bionic,8.华为麒麟9100,9.联发科天玑9200 ,10.高通骁龙7  Ge…

    2025年12月6日 硬件教程
    000
  • cpu天梯图最新排名2025 手机cpu处理器排行榜天梯图top10

    骁龙 8 Gen4、天玑 9400、A18 Pro 和 Exynos 2400 是当前旗舰处理器,分别适用于高端游戏、AI 创作、iOS 生态和游戏玩家。 立即进入“各种好用的网站点击进入”; 一、旗舰处理器(性能天花板) 1. 高通骁龙 8 Gen4 核心配置:1×Cortex-X5(3.8GHz…

    2025年12月6日 硬件教程
    000
  • REDMI K90系列正式发布,售价2599元起!

    10月23日,redmi k90系列正式亮相,推出redmi k90与redmi k90 pro max两款新机。其中,redmi k90搭载骁龙8至尊版处理器、7100mah大电池及100w有线快充等多项旗舰配置,起售价为2599元,官方称其为k系列迄今为止最完整的标准版本。 图源:REDMI红米…

    2025年12月6日 行业动态
    000
  • 12306铁路官网登录入口_12306官方购票平台入口

    12306铁路官网登录入口为https://www.12306.cn,用户可在此完成注册、购票、改签等操作,官方APP同步提供电子发票、候补购票等功能,确保便捷出行。 12306铁路官网登录入口在哪里?这是近期不少旅客关心的问题,尤其是在出行高峰期,如何快速准确地进入官方购票平台成为大家关注的焦点。…

    2025年12月6日 软件教程
    000
  • 商业市场AI绽放的秘密,藏在伙伴协同创新的“黑土地”里

    在ai深度赋能千行百业的浪潮中,企业数量庞大、覆盖范围广泛的商业市场正成为推动数智化变革的核心力量,其转型路径与实践模式日益受到关注。 据权威机构发布的数据显示,我国工业、批发零售住宿餐饮以及服务业三类规模以上企业的总数已突破百万,其资产规模、营收、利润及税收贡献占所有市场主体总量的80%以上,堪称…

    2025年12月6日 行业动态
    000
  • Linux中如何安装Nginx服务_Linux安装Nginx服务的完整指南

    首先更新系统软件包,然后通过对应包管理器安装Nginx,启动并启用服务,开放防火墙端口,最后验证欢迎页显示以确认安装成功。 在Linux系统中安装Nginx服务是搭建Web服务器的第一步。Nginx以高性能、低资源消耗和良好的并发处理能力著称,广泛用于静态内容服务、反向代理和负载均衡。以下是在主流L…

    2025年12月6日 运维
    000
  • Linux journalctl与systemctl status结合分析

    先看 systemctl status 确认服务状态,再用 journalctl 查看详细日志。例如 nginx 启动失败时,systemctl status 显示 Active: failed,journalctl -u nginx 发现端口 80 被占用,结合两者可快速定位问题根源。 在 Lin…

    2025年12月6日 运维
    000
  • 华为新机发布计划曝光:Pura 90系列或明年4月登场

    近日,有数码博主透露了华为2025年至2026年的新品规划,其中pura 90系列预计在2026年4月发布,有望成为华为新一代影像旗舰。根据路线图,华为将在2025年底至2026年陆续推出mate 80系列、折叠屏新机mate x7系列以及nova 15系列,而pura 90系列则将成为2026年上…

    2025年12月6日 行业动态
    000
  • Linux如何优化系统性能_Linux系统性能优化的实用方法

    优化Linux性能需先监控资源使用,通过top、vmstat等命令分析负载,再调整内核参数如TCP优化与内存交换,结合关闭无用服务、选用合适文件系统与I/O调度器,持续按需调优以提升系统效率。 Linux系统性能优化的核心在于合理配置资源、监控系统状态并及时调整瓶颈环节。通过一系列实用手段,可以显著…

    2025年12月6日 运维
    000
  • Pboot插件数据库连接的配置教程_Pboot插件数据库备份的自动化脚本

    首先配置PbootCMS数据库连接参数,确保插件正常访问;接着创建auto_backup.php脚本实现备份功能;然后通过Windows任务计划程序或Linux Cron定时执行该脚本,完成自动化备份流程。 如果您正在开发或维护一个基于PbootCMS的网站,并希望实现插件对数据库的连接配置以及自动…

    2025年12月6日 软件教程
    000

发表回复

登录后才能评论
关注微信