Laravel повторил отложенную работу - PullRequest
0 голосов
/ 22 марта 2019

Я пишу Laravel JSON API, используя MySQL.То, что я пытаюсь сделать, это то, что когда пользователь создает запись, я хочу выполнять некоторые операции с этой записью каждые 24 часа, пока администратор не внесет некоторые изменения в эту запись.Так что в среднем эта работа будет повторяться 10-15 раз.это моя работа:

    <?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use App\Http\Models\Orders\RoadOrder;

class RoadOrderEprirationHandler implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    protected $order_id;

    public function __construct($order_id)
    {
        $this->order_id = $order_id;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $order = RoadOrder::findOrFail($this->order_id);
        //do some tasks and if I need to run this cycle again :
            $roadOrderEprirationHandler = new RoadOrderEprirationHandler($order->id);
            $roadOrderEprirationHandler->dispatch($order->id)->delay(now()->addHours(24));
    }
}

Итак, как вы можете видеть, я запускаю задание после завершения предыдущего задания, если администратор не изменил запись, и мне нужно снова запустить цикл.после нескольких циклов я больше не буду запускать работу, поэтому она будет закончена.

Мой вопрос:

Есть ли проблемы в этой реализации?возможно, я делаю что-то не так, или может произойти утечка памяти (потому что я снова и снова создаю работу внутри работы).Я могу написать это, но мне нужно быть уверенным, что эта реализация не приведет к каким-либо ошибкам или ошибкам.

1 Ответ

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

Почему бы не создать отдельную таблицу в вашей БД для этой цели?

Вы можете сохранить order_ids со статусом (проверено администратором / не проверено).Или просто поместите туда новый order_id и удалите его после проверки администратором.Таким образом, вы будете использовать только свою работу, чтобы увидеть, есть ли какие-либо непроверенные идентификаторыИли что-то в этом роде.

Я думаю, что этот подход более предсказуем и менее глючит.

...