Я использую Laravel Jobs для извлечения данных из Stripe API с разбивкой на страницы. По сути, каждое задание получает «идентификатор бренда» (у пользователя может быть несколько брендов на одну учетную запись) и параметр «начать после». Он использует это, чтобы знать, какой токен полосы использовать и с чего начать при разбиении на страницы вызовов (это задание вызывает себя, если в разбивке на страницы доступно больше ответов полосы). Это нормально работает, когда задание запускается один раз.
Но есть вариант использования, когда пользователь может добавить ключи полосы для нескольких брендов за короткое время, и этот класс задания может вызываться несколько раз одновременно с разными параметрами. Когда это происходит, тот процесс, который был запущен последним, перезаписывает другие, потому что параметры перезаписываются только до последнего вызванного. Итак, если я начинаю работу с полосой с 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
кодом класса? - person Foued MOUSSI   schedule 25.02.2020