Nikolino
@Nikolino

Как вызывать одну и ту же очередь каждые N секунд?

Вызываю очередь
Route::get('/', function () {
    $test = Test::find(1);
    App\Jobs\ChangeTestNumber::dispatch()->delay(15);
});

Очередь добавляется в таблицу и выполняется метод handle()

public function handle()
{
    $test = Test::find(1);
    $test->number = rand(1,540);
    $test->save();        
}


В handle пытаюсь опять вызвать эту же очередь так:
public function handle()
{
    $test = Test::find(1);
    $test->number = rand(1,1000);
    $test->save(); 
    self::dispatch()->delay(20);  
}


Но вторая и последующие очереди не добавляются в jobs, только первая.

Делаю тестовое задание(уже неактуальное, делаю для себя). Вопрос такой:

Добавим новое поле пользователю user - experience 
Нужно создать функцию, в которой:

Будет извлекаться пользователь и сохраняться в переменную $user = User::find(1) 

Дальше функция выводит experience
Параллельно с работой функции 

Асинхронный метод меняет опыт на случайное число каждые несколько секунд 

В первой функции ещё раз выводится спустя промежуток времени опыт пользователя. 
Каким будет этот вывод ? 



Подскажите как еще можно сделать выполнение какого-то метода каждые N секунд используя очереди? Или не используя их. Cronjob'ы выполняются раз в минуту, можно конечно как-то заморочиться со sleep'ами, но может есть вариант получше?
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
JhaoDa
@JhaoDa
LaravelRUS Team
Но вторая и последующие очереди не добавляются в jobs
Вот тут я мозг сломал. Обычно джобы в очередь ставят, а не очереди в джобы...

https://github.com/laravel/framework/blob/5.7/src/...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы