【问题标题】:Laravel JobId how to use it to check if job is doneLaravel JobId 如何使用它来检查工作是否完成
【发布时间】:2017-08-22 12:01:06
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    我提出了这个解决方案:

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

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

    【讨论】:

      【解决方案2】:

      您需要根据文档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

      【讨论】:

      • 这实际上不是我的问题,队列的所有东西都在工作:) 这只是一个检查问题。
      猜你喜欢
      • 1970-01-01
      • 2017-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多