【问题标题】:How to get the queued job from job ID in Laravel?如何从 Laravel 中的作业 ID 获取排队的作业?
【发布时间】:2017-03-12 18:29:18
【问题描述】:

有没有办法从 Laravel 中的作业 ID 中获取排队的作业?在将作业添加到队列时,我存储作业 ID。稍后在某个时间点(处理队列中的作业有延迟),我想从队列中删除作业。如果我可以使用作业 ID 获取队列中的作业,我可以使用 delete() 方法将其删除。

【问题讨论】:

    标签: laravel queue laravel-5.2 jobs


    【解决方案1】:

    这是一个队列,因此您无法选择它,但如果您也在队列之外记录数据,您可以查看添加到 AppServiceProvider.php 的 Queue::before(){} 以检查存储的 ID 或引用在作业离开队列并在处理之前。

    我也在这个领域工作,所以如果我找到了这个代码,如果我找到了,我会发布它。当您在 before() 中返回一个事件时,您必须打开它并取出作业进行检查。

    【讨论】:

      【解决方案2】:

      我将此代码用于 laravel 5.5:

      use Illuminate\Contracts\Bus\Dispatcher;
      
      $job = ( new JOB_CLASS() )->onQueue('QUEUE_NAME')->delay('DELAY');
      $id  = app(Dispatcher::class)->dispatch($job);
      

      【讨论】:

      • 这是唯一的交配方式吗?
      • @SantoshAchari 老实说,我找不到任何其他解决方案,我认为这是最简单的方法。
      • 2021 Lumen v8,也适用于我。非常感谢,为什么这不在 Docs 中...
      【解决方案3】:

      您可以使用 DB::table() 通过 id 搜索特定作业,并在调度作业时返回作业表的 id。

      use DB;
      
      class ServiceClass
      {
          public function deleteJobIfExists($id)
          {
              $jobTable = 'jobs';
              $job = DB::table($jobTable)->find($id);
              
              return $job ? ($job->delete ? 1 : -1) : 0;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-11
        • 2018-03-28
        • 1970-01-01
        • 1970-01-01
        • 2015-11-03
        • 1970-01-01
        • 2013-12-28
        • 2015-10-03
        相关资源
        最近更新 更多