Повторяемая работа для Laravel JSON API - PullRequest
1 голос
/ 22 марта 2019

Я пишу Laravel JSON API на MySQL.Представьте, что пользователь создает запись в моей базе данных.Я хочу выполнить какую-то операцию через 24 часа после создания этой записи.Я могу добиться этого используя: AfterInsertJob::dispatch()->delay(now()->addHours(24));.Но мне нужно выполнять эту операцию снова и снова, пока не существует запись.Так как я могу это сделать?Должен ли я отправить работу внутри работы?Я имею в виду Должен ли я отправить AfterInsertJob внутрь AfterInsertJob?Я мог бы использовать Schedule, но как остановить этот график с AfterInsertJob?

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

вы можете в AfterInsertJob-> handle, при выполнении создать новую очередь:

$need_to_work = true;
.....

if( $need_to_work ){
AfterInsertJob::dispatch()->delay(3);
}
0 голосов
/ 22 марта 2019

Зачем использовать задание для задания. Просто запустите запланированную команду, которая проверяет все ваши требования.

Добавить флаг на запись, которую создает пользователь. Проверьте этот флаг в команде, которую вы пишете, и выполните требуемую задачу. Если пользователь делает все, что ему нужно, установите флаг, и ваша команда проигнорирует эту запись. Если нет, то это будет сделано, пока не будет установлено.

Если это требуется ровно через 24 часа после создания, вы можете проверить дату создания (и кратную ей) и флаг. Но есть и другие способы.

Обновление:

После прочтения вашего комментария у меня появилась другая идея, которая может лучше удовлетворить ваши потребности. Вы можете использовать две вещи.

  1. задержка
  2. количество попыток / макс. Попыток

задержка это метод, называемый почему диспетчеризация

макс. Попыток является пророчеством класса работы под названием «попытки»

Ваша работа проверит все, что нужно проверить, и если пользователь НЕ выполнит требования, вы допустите сбой задания. Если это так, он будет перенесен обратно в очередь с задержкой в ​​24 часа. Это будет повторяться до тех пор, пока не будет достигнуто максимальное количество попыток.

...