За последние 24 часа нас посетили 17933 программиста и 1586 роботов. Сейчас ищут 1273 программиста ...

Выполнение отложенной очереди

Тема в разделе "Laravel", создана пользователем sowelanes, 25 июл 2018.

Метки:
  1. sowelanes

    sowelanes Активный пользователь

    С нами с:
    11 дек 2014
    Сообщения:
    101
    Симпатии:
    0
    Господа коллеги, день добрый. Подскажите пожалуйста:

    Есть некий контролер который получает массив данных. Его нужно обработать в очереди с задержкой между задачами.

    Выполняю:
    Код (PHP):
    1. foreach ($trades as $key => $trade){
    2.     $data = [...];  
    3.     $delay = $key + 1; // например
    4.     $job = (new ProcessTrade($data))->delay($delay);
    5.     $this->dispatch($job);
    6. }
    Очередь выполняется сразу. При этом, QUEUE_DRIVER=database и Job класс использует все необходимые трейты:

    Код (PHP):
    1. class ProcessTrade implements ShouldQueue
    2. {
    3.     use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    Так же пробовал вот так:

    Код (PHP):
    1. $delay = $key + 1;
    2. $job = (new ProcessTrade($data))->delay(Carbon::now()->addSeconds($delay));
    3. $this->dispatch($job);
    Тоже самое. Очереди стреляют одна за другой, в логах supervisor никаких задержек:

    Код (Text):
    1.  
    2. [2018-07-24 22:40:04][3] Processing: App\Jobs\ProcessTrade
    3. [2018-07-24 22:40:05][3] Processed:  App\Jobs\ProcessTrade
    4. [2018-07-24 22:40:05][4] Processing: App\Jobs\ProcessTrade
    5. [2018-07-24 22:40:06][4] Processed:  App\Jobs\ProcessTrade
    6. [2018-07-24 22:40:06][5] Processing: App\Jobs\ProcessTrade
    7. [2018-07-24 22:40:06][5] Processed:  App\Jobs\ProcessTrade
     
  2. sowelanes

    sowelanes Активный пользователь

    С нами с:
    11 дек 2014
    Сообщения:
    101
    Симпатии:
    0
    Чет все прямо напряглись. Спасибо, тему можно сносить. Проблема решена.