Laravel JobId如何使用它来检查工作是否完成

时间:2017-08-22 12:01:06

标签: laravel-5 lumen laravel-queue laravel-jobs

我有问题如何检查作业是否完成。我到处寻找,但我没有看到Laravel / Lumen有什么可以合作的,我可能会错过一些。示例代码:

$job = ((new FooJob($data)));
$jobID = dispatch($job);

if(is_numeric($jobID)) {
  while(elapsedTime < 10sec) {
    CHECK_JOB_SOMEHOW_IF_IS_DONE !?!
  }
}

我已经安装了https://github.com/gilbitron/laravel-queue-monitor,这确实有助于保存已完成作业的数据。在那里我也没有看到任何东西。

我有Lumen 5.4框架。

2 个答案:

答案 0 :(得分:0)

我提出了这个解决方案:

当作业在Job :: Handle结束时完成时,我将Redis标记为此特定作业(设置redis键“job:[ID_JOB]”val 1),而不是在请求部分我检查Redis弹出时键,就是这样。它工作正常。

另一个解决方案是通过流明/ laravel的事件系统,做一个Redis标记,但是对于我想要的它看起来有点矫枉过正。

答案 1 :(得分:-1)

您需要根据文档Queues - Lumen创建jobs和jobs_failed表。

有必要在 app / config 文件夹中创建 queue.php 文件,并按照文件模板进行操作:

return [
    'default' => env('QUEUE_DRIVER', 'sync'),
    'connections' => [
        'sync' => [
            'driver' => 'sync',
        ],
        'database' => [
            'driver' => 'database',
            'table' => 'jobs',
            'queue' => 'default',
            'retry_after' => 60,
        ],
    ],
    'failed' => [
        'database' => env('QUEUE_CONNECTION', 'mysql'),
        'table' => 'jobs_failed',
    ], ];

创建表格后,使用方法发送时,信息将保存在作业表中。

要处理队列,请使用命令php artisan queue:work