php - Laravel 重复延迟工作

标签 php mysql laravel memory-leaks delayed-job

我正在使用 MySQL 编写 Laravel json api。我想做的是,每当用户创建记录时,我想每 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));
    }
}

正如您所看到的,如果管理员没有修改记录,我会在上一个作业完成后启 Action 业,并且我需要再次运行循环。几个周期后,我不会再运行作业,所以它会完成。

我的问题:

这个实现有什么问题吗?也许我做错了什么,或者可能会发生某种类型的内存泄漏(因为我一次又一次地在作业中创建作业)。我可以写这个,但我需要确保这个实现不会导致某种类型的错误或错误。

最佳答案

为什么不在数据库中为此目的创建一个单独的表?

您可以保留 order_ids 的状态(由管理员检查/未检查)。或者只是将新的 order_id 放在那里并在管理员检查后将其删除。所以你只会使用你的作业来查看是否有任何未经检查的 ID。或者某种那样的。

我认为这种方法更可预测并且错误更少。

关于php - Laravel 重复延迟工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55304249/

相关文章:

MySQL索引问题

php - 无法将 user_id 和 product_id 插入购物车。拉维尔 5

php - 如何管理依赖自动加载

php - 如何从 mysql 读取标记信息并使用 AJAX 在谷歌地图上动态显示这些标记?时间问题

php - 将包含字符串和数字的多维数组插入 MySQL

php - 在表中列出结果 - While 循环并在 TD 中列出结果

php - 如何在 Laravel 中加密/解密 session 值

javascript - 如何使用 $.ajax(); laravel 中的函数

php - 集成 php mysql 和 voip 以及文本到语音

javascript - 父子复选框选择