Laravel单个作业类多次调度,不同参数被覆盖

Laravel单个作业类多次调度,不同参数被覆盖,laravel,laravel-queue,Laravel,Laravel Queue,我正在使用Laravel作业以分页方式从条带API中提取数据。基本上,每个作业都会获得一个品牌id,用户可以在每个帐户中拥有多个品牌,并有一个start after参数。如果分页中有更多条带响应可用,它将使用该条带令牌来知道要使用哪个条带令牌以及在分页调用中从何处开始此作业调用本身。当作业启动一次时,此操作运行正常 但是有一个用例,用户可以在短时间内将条带密钥添加到多个品牌,并且可以使用不同的参数同时调用作业类多次。发生这种情况时,无论最后启动哪个进程,都会覆盖其他进程,因为参数只会覆盖到最后一

我正在使用Laravel作业以分页方式从条带API中提取数据。基本上,每个作业都会获得一个品牌id,用户可以在每个帐户中拥有多个品牌,并有一个start after参数。如果分页中有更多条带响应可用,它将使用该条带令牌来知道要使用哪个条带令牌以及在分页调用中从何处开始此作业调用本身。当作业启动一次时,此操作运行正常

但是有一个用例,用户可以在短时间内将条带密钥添加到多个品牌,并且可以使用不同的参数同时调用作业类多次。发生这种情况时,无论最后启动哪个进程,都会覆盖其他进程,因为参数只会覆盖到最后一次调用的参数。因此,如果我以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));
    }
}

据拉威尔说

如果在未明确定义作业队列的情况下分派作业 如果已分派到,则作业将放置在 在连接配置的队列属性中定义

但是,将作业推送到具有唯一名称的多个队列对于您的用例尤其有用

队列名称可以是唯一标识队列本身的任何字符串。例如,您可能希望基于uniqid和$brand_id构造队列名称

例如:


你能分享一下你的职业分类代码吗?我应该说得更清楚。示例代码是ThisJob。作业是递归的,以便对条带API调用的所有结果进行分页。这很奇怪。我从来没有听说过凌驾于一切之上的工作。您对覆盖的结果所做的不是吗?
// This job is sent to the default queue...
dispatch(new Job);

// This job is sent to the "emails" queue...
dispatch((new Job)->onQueue('emails'));
dispatch(new ThisJob($this->brand_id, $new_start_after)->onQueue(uniqid() . '_' . $this->brand_id));