【问题标题】:How could I dispatch one job from another in Laravel我如何在 Laravel 中分派一份工作
【发布时间】:2018-07-28 01:23:58
【问题描述】:
Trait method dispatch has not been applied, because there are collisions with other trait methods on 

我总是收到上述错误,现在我想在工作中同时使用 Dispatchable 和 DispatchJobs,我该怎么做?任何帮助或指导将不胜感激。在 Laracasts 上寻找了一些解决方案,但没有一个有效。

【问题讨论】:

  • 在另一个工作中分派工作时要小心!例如:JOB A 和 JOB B。在 JOB A 内调度 JOB B 时,每当 JOB B 被调度后 JOB A 内部发生故障时,在重试 JOB A 时会再次调度 JOB B!

标签: laravel traits jobs laravel-queue laravel-jobs


【解决方案1】:

作业通常不会分派其他作业,因此首先要删除 DispatchJobs 特征。你可以做的是收听job events

当作业完成时,它会触发 after 事件。监听此事件,然后 dispatch() 监听器中的下一个作业:

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    Queue::after(function (JobProcessed $event) {
        // determine the job type from $event->job
        // then dispatch the next job based on your logic

        // check the job type
        if ($event->job instanceof MyJob) {
            // get the job payload to pass to next job
            $data = $event->job->payload

            dispatch(new NextJob($data));
            // or use the static method
            NextJob::dispatch($data);
        }
    });
}

【讨论】:

  • 嗨@btl,谢谢你的回复,我仍然需要你的小指导,现在从JOB A,我需要传递一些将在JOB B中使用的数据,我该怎么做那与之后的事件?以及我将如何识别特定的工作。我只想在 JOB A 结束时触发事件。谢谢你:)
  • 非常感谢,但我也找到了更好的解决方案:),只需使用全局dispatch();就不会产生任何冲突,并且运行顺利。
  • 我已经回答了我自己的问题,你可以看看 :) @btl
  • @Siddharth 你必须明确设置\dispatch() 还是简单地设置dispatch() 才能对其进行全局调用?
  • @Ulterior 只需 dispatch()
【解决方案2】:

使用全局 dispatch() 助手,这将有助于在作业中分派另一个作业。所以我们根本不需要添加 DispatchesJobs(这消除了与 Dispatchable 的冲突),您只需使用帮助器 dispatch() 代替它就可以了

【讨论】:

    【解决方案3】:

    来自 Laravel >=5.3

    如果您的工作类别是 MyAnotherJob,请尝试分派

    MyAnotherJob::dispatch()

    每个Job 类都有一个静态dispatch 函数。 你可以用那个。

    【讨论】:

    • 猜测取决于 Laravel 版本,它在 5.2 中不存在
    • @RZ87 感谢您发现这一点。
    【解决方案4】:

    这对我有用

    BbtvAdvJob旁边我再次发送。

     dispatch(new BbtvAdvJob())->delay(3);
    

    确保在更改作业代码时记得php artisan queue:work

    【讨论】:

      猜你喜欢
      • 2017-12-10
      • 2017-03-13
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2015-12-11
      • 2021-03-11
      • 1970-01-01
      相关资源
      最近更新 更多