stancl/ jobpipeline
将任何一系列任务转换为Laravel监听器。
Requires
- php: ^8.0
- illuminate/support: ^9.0|^10.0|^11.0
Requires (Dev)
- ext-redis: *
- orchestra/testbench: ^7.0|^8.0|^9.0
- spatie/valuestore: ^1.2
This package is auto-updated.
Last update: 2024-08-27 23:29:21 UTC
README
JobPipeline
是一个简单但功能强大的类,它允许你将任何(一系列)任务转换为事件监听器。
你可以像使用任何其他监听器一样使用任务管道,因此您可以使用$listen
数组将其注册到EventServiceProvider
,或者在任何其他位置使用Event::listen()
——由您决定。
创建任务管道
以下代码片段将使用我的多租户包中的示例。
要创建任务管道,首先指定您想要使用的任务
<?php use Stancl\JobPipeline\JobPipeline; use Stancl\Tenancy\Jobs\{CreateDatabase, MigrateDatabase, SeedDatabase}; JobPipeline::make([ CreateDatabase::class, MigrateDatabase::class, SeedDatabase::class, ])
然后,指定您想要传递给任务的变量。这通常来自事件。
<?php use Stancl\JobPipeline\JobPipeline; use Stancl\Tenancy\Jobs\{CreateDatabase, MigrateDatabase, SeedDatabase}; use Stancl\Tenancy\Events\TenantCreated; JobPipeline::make([ CreateDatabase::class, MigrateDatabase::class, SeedDatabase::class, ])->send(function (TenantCreated $event) { return $event->tenant; })
接下来,决定您是否想要排队管道。默认情况下,管道是同步的(=未排队)。
🔥如果您确实想要默认排队管道,您可以通过设置静态属性来实现:
\Stancl\JobPipeline\JobPipeline::$shouldBeQueuedByDefault = true;
<?php use Stancl\Tenancy\Events\TenantCreated; use Stancl\JobPipeline\JobPipeline; use Stancl\Tenancy\Jobs\{CreateDatabase, MigrateDatabase, SeedDatabase}; JobPipeline::make([ CreateDatabase::class, MigrateDatabase::class, SeedDatabase::class, ])->send(function (TenantCreated $event) { return $event->tenant; })->shouldBeQueued(true)
如果您希望将任务推送到不同的队列,您可以传递一个字符串作为第二个参数
<?php use Stancl\Tenancy\Events\TenantCreated; use Stancl\JobPipeline\JobPipeline; use Stancl\Tenancy\Jobs\{CreateDatabase, MigrateDatabase, SeedDatabase}; JobPipeline::make([ CreateDatabase::class, MigrateDatabase::class, SeedDatabase::class, ])->send(function (TenantCreated $event) { return $event->tenant; })->shouldBeQueued(true, 'another-queue');
这可以通过调用shouldBeQueued(queue: 'another-queue')
来简化,因为第一个参数默认为true
。
最后,将管道转换为监听器并将其绑定到事件
<?php use Stancl\Tenancy\Events\TenantCreated; use Stancl\JobPipeline\JobPipeline; use Stancl\Tenancy\Jobs\{CreateDatabase, MigrateDatabase, SeedDatabase}; use Illuminate\Support\Facades\Event; Event::listen(TenantCreated::class, JobPipeline::make([ CreateDatabase::class, MigrateDatabase::class, SeedDatabase::class, ])->send(function (TenantCreated $event) { return $event->tenant; })->shouldBeQueued(true)->toListener());
请注意,您甚至可以使用任务管道将单个任务转换为事件监听器。如果您有一些在任务类中的逻辑,并且不想只为能够运行这些任务而创建监听器类,这将非常有用。
提示:从任务中返回false
将取消管道中所有后续任务的执行。如果存在创建数据库的任务(例如,因为它检测到数据库已存在),这可以用于取消创建、迁移和数据库种子任务的任务管道。因此,将任务分开到多个管道中可能是个好主意,这样每个逻辑类别的任务都可以单独停止。