【发布时间】:2020-02-25 15:33:50
【问题描述】:
我正在使用 Laravel Jobs 以分页方式从 Stripe API 中提取数据。基本上,每个工作都有一个“品牌 id”(一个用户每个帐户可以有多个品牌)和一个“开始时间”参数。它使用它来知道要使用哪个条带标记以及在分页调用中从哪里开始(如果分页中有更多条带响应可用,则此作业会自行调用)。当作业启动一次时,它运行良好。
但是有一个用例,用户可以在短时间内向多个品牌添加条带键,并且可以使用不同的参数同时多次调用该作业类。发生这种情况时,无论哪个进程最后启动都会覆盖其他进程,因为参数将被覆盖到最后调用的。因此,如果我以brand_id = 1 开始条带作业,然后以brand_id = 2 作业,然后brand_id = 3, 3 在一个周期后覆盖另外两个,并且只有3 个通过所有未来的调用。
如何防止这种情况发生?
我尝试过静态变量、受保护变量、私有变量和公共变量。我认为也许可以通过为每个品牌动态创建队列来解决它,但这似乎是一个非常令人头疼的问题。
public function __construct($brand_id, $start_after = null)
{
$this->brand_id = $brand_id;
$this->start_after = $start_after;
}
public function handle()
{
// Do stripe calls with $brand_id & $start_after
if ($response->has_more) {
// Call next job with new "start_at".
dispatch(new ThisJob($this->brand_id, $new_start_after));
}
}
【问题讨论】:
-
您能分享一下您的
ThisJob班级代码吗? -
我应该更清楚。示例代码是 ThisJob。该作业是递归的,以便对 Stripe API 调用的所有结果进行分页。
-
这很奇怪。我从来没有听说过被覆盖的工作。被覆盖的结果不是你做的吗?
标签: laravel laravel-queue