3

我有问题如何检查作业是否完成。我到处寻找,但我没有看到 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 框架。

4

2 回答 2

1

我提出了这个解决方案:

当 Job 在 Job::Handle 结束时完成时,我在 Redis 中放置了一个标记,对于这个特定的作业(设置 redis key "job:[ID_JOB]" val 1),而不是在请求部分,我在 pop 时检查 Redis 键起来,就是这样。它工作正常。

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

于 2017-08-24T06:21:06.053 回答
-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',
    ], ];

创建表后,使用dispatch方法时,信息将保存在 jobs 表中。

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

于 2017-08-23T22:27:57.317 回答