【问题标题】:Laravel repeated delayed jobLaravel 重复延迟作业
【发布时间】:2019-08-13 17:07:58
【问题描述】:

我正在使用 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));
    }
}

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

我的问题:

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

【问题讨论】:

    标签: php mysql laravel memory-leaks delayed-job


    【解决方案1】:

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

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

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

    【讨论】:

    • 听着,我只需要知道我的方法的问题。
    • 您的实现应该可以正常工作。每次创建 RoadOrderEprirationHandler 时都会创建新作业,所以没有错。如果您担心在 RoadOrderEprirationHandler 中创建 RoadOrderEprirationHandler,请尝试以下代码(看看,它运行良好):` class Foo { public function tryThis() { $newOne = new Foo(); $newOne->printFoo(); } 公共函数 printFoo() { echo 'foo'; } } $foo = 新的 Foo(); $foo->tryThis(); `
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 2011-12-14
    相关资源
    最近更新 更多