laravel-queueable-action:把 Laravel 业务逻辑写成可排队 Action

4次阅读
没有评论
laravel-queueable-action:把 Laravel 业务逻辑写成可排队 Action
获取下载链全程约 1 分钟
  1. 打开微信,搜索「软件教程管家」关注,或长按下方二维码关注
  2. 回复关键词 laravel-queueable-action
  3. 公众号自动回复网盘链接,点击即可保存下载
laravel-queueable-action:把 Laravel 业务逻辑写成可排队 Action打开微信扫一扫关注
或搜索【软件教程管家】
官方渠道:GitHub 仓库

项目介绍

laravel-queueable-action 是 Spatie 出品的 Laravel 扩展包,它把业务逻辑封装成可排队 Action 类:同一个 Action 既可以直接同步执行,也可以交给 Laravel 队列异步执行。Action 的写法和普通类一样,用 __invoke() 定义要做的事情,用 execute() 把它派发到队列里去,不用再为同步和异步各写一套代码。

这个包还配套了队列名称指定、Artisan 生成命令、测试断言、Action 链式调用、Horizon 标签、任务中间件和重试退避时间等能力,适合已经在用 Laravel 队列、想把业务逻辑拆成可复用单元的团队。

仓库 spatie/laravel-queueable-action
语言 PHP
许可证 MIT
Star 数 701

前往 GitHub 查看项目

GitHub 国内访问较慢,如打不开可多刷新几次

适用场景

如果你已经在用 Laravel 队列,又希望业务逻辑有一个统一的组织方式,这个包值得评估。典型场景包括:订单处理、通知发送、数据同步等可以异步化的业务流程,拆成独立 Action 后按需同步或异步执行;需要为 Action 写队列测试断言的项目;需要把多个 Action 串联执行的流程;需要在 Horizon 里给任务打自定义标签的应用。

反过来,如果项目里只有一两个简单的闭包任务,或者根本没用 Laravel 队列,引入这个包的收益就很有限,直接用框架自带的任务机制更轻量。

可排队 Action 的上手步骤

第一步,用 Composer 安装扩展包:

composer require spatie/laravel-queueable-action

第二步,用 Artisan 命令生成一个 Action 类,也可以选择生成可排队版本或同步版本:

php artisan make:action ProcessOrderAction

第三步,在 Action 类里用 __invoke() 写业务逻辑,方法参数就是任务执行时需要的数据:

class ProcessOrderAction
{
    public function __invoke(Order $order)
    {
        // 在这里写订单处理逻辑
    }
}

第四步,调用执行。直接同步执行就调用这个 Action 本身;想走队列,就调 execute(),它会把 Action 作为队列任务派发出去,还可以用 onQueue() 指定队列名称:

(new ProcessOrderAction)->onQueue('high')->execute($order);

第五步,需要串联多个 Action 时,用 ActionJob 把它们链起来;写测试时配合 Queue::fake() 和包里提供的 QueueableActionFake 断言,验证 Action 是否被正确派发。

注意事项

  • 这个包面向 Laravel 队列生态,不能当作与框架无关的通用任务调度器用,脱离 Laravel 队列就发挥不了作用。
  • 异步执行依赖 Laravel 队列驱动和持续运行的队列工作进程,项目本身不替代这些基础设施,上线前要先把驱动和工作进程配好,并处理好失败任务。
  • Action 的参数需要能被队列序列化,传实体模型、闭包或不可序列化的对象时要先确认,否则任务入队就会失败。
  • README 没有完整列出 PHP、Laravel 和队列驱动的兼容矩阵,接入前务必查看 Composer 约束或源码,确认当前项目版本在支持范围内。
  • 重试退避时间和任务中间件是按 Action 配置的,关键业务要先想清楚失败重试策略,不要用默认配置直接上生产。

同类对比

和 Laravel 原生 Job 类相比,Action 类的最大区别是同一份代码两种执行方式:Job 天生就是队列任务,同步执行要另外处理;Action 则同步异步共用一个类,测试断言和链式调用也是配套提供的。项目里 Action 数量不多、流程简单时,原生 Job 完全够用,不必多引一个包。

和直接写在控制器或 Service 类里的同步逻辑相比,Action 把业务逻辑拆成独立、可测试、可复用的单元,适合逻辑较重、会被多处调用的流程;但如果只是简单的一次性操作,抽成 Action 反而多了一层抽象。

和事件监听器相比,Action 更适合有明确输入输出、可重试、可排队的任务型逻辑;事件监听适合解耦的通知型副作用,两者定位不同,可以共存。

推广laravel-queueable-action:把 Laravel 业务逻辑写成可排队 Action

关注「软件教程管家」

回复软件名即取即下:网盘下载链接 + 提取码,一步直达,不用再跳转。

版权与使用提示

本站资源仅供个人学习交流,请勿用于商业用途。软件与资料版权归原作者所有;如有侵权,请通过公众号「软件教程管家」联系我们,我们将在 24 小时内下架处理。查看免责声明 ›

上次编辑至今:1天 · 内容还比较新鲜

公告

契机库网站正式上线!

了解更多
收藏这款软件我的收藏 →

这款软件怎么样?

平均 暂无评分(0 人评)

取链次数:0

评分与投票来自真实访客,从 0 开始累计;觉得有用就点一下,帮更多人判断这款软件值不值得下。

正文完
 0