【问题标题】:Nova Queued Actions triggering multiple jobsNova Queued Actions 触发多个作业
【发布时间】:2020-05-02 20:56:53
【问题描述】:

我已经创建了一个这样的动作:

use Illuminate\Bus\Queueable;
use Laravel\Nova\Actions\Action;
use Illuminate\Support\Collection;
use Laravel\Nova\Fields\ActionFields;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Laravel\Nova\Fields\BelongsTo;
use Illuminate\Support\Facades\Queue;

class ExportToCsv extends Action implements ShouldQueue
{
    use InteractsWithQueue, Queueable;

    public function handle(ActionFields $fields, Collection $models)
    {
        var_dump(time(), collect($models)->map(function($item){
            return $item->id;
        })->first());

        sleep(3);
    }
}

然后我为 1128 个项目(两次)触发它并观察结果:

[2020-05-02 20:45:05][181] Processing: App\Nova\Actions\ExportToCsv
int(1588452305)
int(621525)
[2020-05-02 20:45:05][180] Processing: App\Nova\Actions\ExportToCsv
int(1588452305)
int(412186)
[2020-05-02 20:45:05][179] Processing: App\Nova\Actions\ExportToCsv
int(1588452305)
int(621282)
[2020-05-02 20:45:08][181] Processed:  App\Nova\Actions\ExportToCsv
[2020-05-02 20:45:08][184] Processing: App\Nova\Actions\ExportToCsv
int(1588452308)
int(623886)
[2020-05-02 20:45:08][180] Processed:  App\Nova\Actions\ExportToCsv
[2020-05-02 20:45:08][182] Processing: App\Nova\Actions\ExportToCsv
int(1588452308)
int(622950)
[2020-05-02 20:45:08][179] Processed:  App\Nova\Actions\ExportToCsv
[2020-05-02 20:45:08][183] Processing: App\Nova\Actions\ExportToCsv
int(1588452308)
int(623252)
[2020-05-02 20:45:11][184] Processed:  App\Nova\Actions\ExportToCsv
[2020-05-02 20:45:11][182] Processed:  App\Nova\Actions\ExportToCsv
[2020-05-02 20:45:11][183] Processed:  App\Nova\Actions\ExportToCsv
[2020-05-02 20:45:35][185] Processing: App\Nova\Actions\ExportToCsv
int(1588452335)
int(621282)
[2020-05-02 20:45:35][187] Processing: App\Nova\Actions\ExportToCsv
int(1588452335)
int(621525)
[2020-05-02 20:45:35][186] Processing: App\Nova\Actions\ExportToCsv
int(1588452335)
int(412186)
[2020-05-02 20:45:38][185] Processed:  App\Nova\Actions\ExportToCsv
[2020-05-02 20:45:38][188] Processing: App\Nova\Actions\ExportToCsv
int(1588452338)
int(622950)
[2020-05-02 20:45:38][187] Processed:  App\Nova\Actions\ExportToCsv
[2020-05-02 20:45:38][190] Processing: App\Nova\Actions\ExportToCsv
int(1588452338)
int(623886)
[2020-05-02 20:45:38][186] Processed:  App\Nova\Actions\ExportToCsv
[2020-05-02 20:45:38][189] Processing: App\Nova\Actions\ExportToCsv
int(1588452338)
int(623252)
[2020-05-02 20:45:41][188] Processed:  App\Nova\Actions\ExportToCsv
[2020-05-02 20:45:41][190] Processed:  App\Nova\Actions\ExportToCsv
[2020-05-02 20:45:41][189] Processed:  App\Nova\Actions\ExportToCsv

默认情况下,批次按 200 个项目分组,据我所见,同时产生了 3 个作业。不幸的是,无法知道哪个作业将首先处理,因此模型会在日志中显示每个批次更改,如输出所示:621525, 412186, 621282 表示第一次调用操作时,621282, 621525, 412186 表示第二次调用(模型以相同的方式在作业之间拆分,但处理的作业顺序会发生变化)。这里的问题是,如果我将视图保存到 CSV 文件,顺序很重要。

我希望在给定的时间为给定的操作只生成一项工作,这将解决我的问题。这可能吗?

使用 Horizo​​n 作为队列工作者

【问题讨论】:

    标签: laravel-nova laravel-horizon


    【解决方案1】:

    实现这一点的方法是更改​​水平配置中的processes 值:

        'environments' => [
            'local' => [
                'supervisor-1' => [
                    'connection' => 'redis',
                    'queue' => ['default'],
                    'balance' => 'simple',
                    'processes' => 1,
                    'tries' => 3,
                ],
            ],
    

    【讨论】:

      猜你喜欢
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 2011-01-30
      • 2022-11-02
      • 2021-03-19
      • 1970-01-01
      相关资源
      最近更新 更多