use-the-fork/laravel-haystack

Laravel 的超级工作链

dev-main 2024-04-26 12:22 UTC

This package is auto-updated.

Last update: 2024-09-26 13:09:32 UTC


README

Laravel Haystack

⚡️ Laravel 的超级工作链

Build Status

点击此处阅读文档

Laravel Haystack 为 Laravel 提供了超级工作链。它具有强大的功能,例如延迟作业时间,为每个作业应用中间件,在作业之间共享数据和模型,甚至分批处理作业。Laravel Haystack 支持所有内置的队列连接/工作者。(数据库、Redis/Horizon、SQS)。如果您需要按链排队成千上万的作业,或者您正在寻找原始 Bus 链不提供的功能,这将非常棒。

$haystack = Haystack::build()
   ->addJob(new RecordPodcast)
   ->addJob(new ProcessPodcast)
   ->addJob(new PublishPodcast)
   ->then(function () {
      // Haystack completed
   })
   ->catch(function () {
      // Haystack failed
   })
   ->finally(function () {
      // Always run either on success or fail.
   })
   ->withMiddleware([
      // Middleware for every job
   ])
   ->withDelay(60)
   ->withModel($user)
   ->dispatch();

Laravel 已经有工作链了吗?

没错!Laravel 确实有工作链,但它们有一些缺点,您可能需要考虑。

  • 它们消耗相当多的内存/数据,因为链存储在作业中。如果您存储了成千上万的作业,这尤其如此。
  • 它们是易变的,这意味着如果您在链中丢失一个作业,您将丢失整个链。
  • 它们不提供批量作业的 thencatchfinally 可调用方法。
  • 基于内存或 SQS 队列的长时间延迟是不可能的,因为您可能会因为过期或服务器关闭而丢失作业。
  • 您无法在作业之间共享数据,因为没有“状态”跨越链。

Laravel Haystack 通过将工作链存储在数据库中并一次排队一个作业来解决此问题。当作业完成时,Laravel Haystack 监听“作业完成”事件,并从数据库中排队链中的下一个作业。

Laravel Haystack 功能

  • 内存消耗低,因为一次处理一个作业,链存储在数据库中
  • 您可以根据需要延迟/释放作业,因为它将使用调度器重新启动链。即使您的队列驱动程序是 SQS 也可以!
  • 它提供了 thencatchfinally 等回调方法。
  • 全局中间件可以应用于链中的每个作业
  • 您可以将存储在链中的每个作业共享的模型和数据存储。
  • 您可以在以后的时间准备 Haystack 并调度它

用例

  • 如果您需要连续进行数百或数千次 API 调用,可以与 Spatie 的 Job Rate Limiter 结合使用,以跟踪延迟并在达到速率限制时暂停作业。
  • 如果您需要一次排队成千上万的作业链。
  • 如果您需要批量导入数据行 - 每行可以是一个 Haystack 作业(bale)并逐个处理。同时将重要的作业信息存储在数据库中。
  • 如果您使用 Amazon SQS 时需要比 15 分钟更长的“释放”时间。

安装

您可以使用 Composer 安装此包。 Laravel Haystack 需要 Laravel 8+ 和 PHP 8.1

composer require use-the-fork/laravel-haystack

接下来,只需运行安装命令!

php artisan haystack:install

文档

点击此处阅读文档

支持 Haystack 的开发

虽然我从未期望过任何东西,但如果您想支持我的工作,您可以通过购买咖啡来支持我的 Ko-Fi 页面!

Buy Me a Coffee at ko-fi.com

感谢您使用 Laravel Haystack ❤️