Я использую Laravel Задания для извлечения данных из Stripe API в разбивке по страницам. По сути, каждая работа получает «идентификатор бренда» (пользователь может иметь несколько брендов на одну учетную запись) и параметр «начать после». Он использует это, чтобы узнать, какой токен чередования использовать и с чего начинать при вызовах с разбивкой на страницы (это задание вызывается само по себе, если в разбиении на страницы доступно больше чередующихся ответов). Это работает нормально, когда задание запускается один раз.
Но есть случай, когда пользователь может за короткое время добавить ключи чередования для нескольких брендов, и этот класс заданий может вызываться несколько раз одновременно с различными параметрами. Когда это происходит, тот процесс, который запускается последним, перезаписывает другие, потому что параметры перезаписываются только до последнего вызванного. Поэтому, если я начну задание чередования с brand_id = 1, а затем задание brand_id = 2, затем brand_id = 3, 3 перезапишут два других после одного цикла и только 3 будут переданы для всех будущих вызовов.
Как мне этого избежать?
Я пробовал stati c vars, я пробовал защищенные, приватные и публичные c vars. Я подумал, что мог бы решить эту проблему с помощью динамически создаваемых очередей для каждого бренда, но это кажется огромной головной болью.
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));
}
}