【问题标题】:Laravel Horizon: job status trackingLaravel Horizo​​n:工作状态跟踪
【发布时间】:2018-12-21 19:39:03
【问题描述】:

对于某个 Laravel Horizo​​n 作业,我有一个函数可以根据 Horizo​​n 存储库检查特定模型的作业当前是否正在运行:

public static function isRunning($model)
{        
    $tag = self::getTag($model);
    $tagRepository = app()->make(TagRepository::class);
    $jobRepository = app()->make(JobRepository::class);
    $jobIds = $tagRepository->jobs($tag);
    $jobs = $jobRepository->getJobs($jobIds);
    $runningJobs = collect($jobs)->reject(function($job) {
        return $job->status === HorizonRedisJobStatuses::STATUS_COMPLETED // 'completed'
            || $job->status === HorizonRedisJobStatuses::STATUS_FAILED; // 'failed'
    });

    return $runningJobs->count() > 0;
}

此代码大部分时间都有效,但是,有时会因为超时而重新启动此类作业。在这种情况下,我在$jobs 变量中的所有作业都标记为"completed",因此函数返回false。似乎重新启动的作业没有填充到存储库中。

目前我想出的唯一解决方法是在进程开始/结束时在数据库中手动跟踪作业状态,但是,如果 Horizo​​n 尝试用完,这仍然会给我错误的结果。

那么有人知道如何正确跟踪 Horizo​​n 中的工作状态吗?

【问题讨论】:

  • 能否请您显示完整的课程源代码?我无法理解此方法所在的上下文。

标签: php laravel laravel-horizon


【解决方案1】:

我将它作为一个错误发布在 Horizo​​n Github 上,它已在拉取请求 https://github.com/laravel/horizon/pull/478 中修复

现在示例中的代码应该可以正常工作了。

【讨论】:

    猜你喜欢
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 2012-11-16
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    相关资源
    最近更新 更多