use-the-fork / laravel-haystack
Laravel 的超级工作链
dev-main
2024-04-26 12:22 UTC
Requires
- php: ^8.1
- illuminate/console: ^9.33 || ^10.0 || ^11.0
- illuminate/contracts: ^9.33 || ^10.0 || ^11.0
- illuminate/database: ^9.33 || ^10.0 || ^11.0
- illuminate/queue: ^9.33 || ^10.0 || ^11.0
- illuminate/support: ^9.33 || ^10.0 || ^11.0
- laravel/serializable-closure: ^1.2
Requires (Dev)
- laravel/pint: ^1.0
- orchestra/testbench: ^7.8 || ^8.0 || ^9.0
- pestphp/pest: ^1.21 || ^2.34
- pestphp/pest-plugin-laravel: ^1.2 || ^2.3
- sammyjo20/laravel-chunkable-jobs: ^1.0
- spatie/laravel-ray: ^1.26
Suggests
- sammyjo20/laravel-chunkable-jobs: Allows you to use the job chunking feature
This package is auto-updated.
Last update: 2024-09-26 13:09:32 UTC
README

Laravel Haystack
⚡️ Laravel 的超级工作链
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 确实有工作链,但它们有一些缺点,您可能需要考虑。
- 它们消耗相当多的内存/数据,因为链存储在作业中。如果您存储了成千上万的作业,这尤其如此。
- 它们是易变的,这意味着如果您在链中丢失一个作业,您将丢失整个链。
- 它们不提供批量作业的
then
、catch
和finally
可调用方法。 - 基于内存或 SQS 队列的长时间延迟是不可能的,因为您可能会因为过期或服务器关闭而丢失作业。
- 您无法在作业之间共享数据,因为没有“状态”跨越链。
Laravel Haystack 通过将工作链存储在数据库中并一次排队一个作业来解决此问题。当作业完成时,Laravel Haystack 监听“作业完成”事件,并从数据库中排队链中的下一个作业。
Laravel Haystack 功能
- 内存消耗低,因为一次处理一个作业,链存储在数据库中
- 您可以根据需要延迟/释放作业,因为它将使用调度器重新启动链。即使您的队列驱动程序是 SQS 也可以!
- 它提供了
then
、catch
和finally
等回调方法。 - 全局中间件可以应用于链中的每个作业
- 您可以将存储在链中的每个作业共享的模型和数据存储。
- 您可以在以后的时间准备 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 页面!
感谢您使用 Laravel Haystack ❤️