【问题标题】:Laravel queued job success notificationLaravel 排队作业成功通知
【发布时间】:2021-07-03 20:42:01
【问题描述】:

我很好奇,如果他们选择接收通知,我如何知道排队作业何时成功完成以可能通知相关用户。

具体来说,我正在使用带有 ShouldQueue 特征的 Laravel Excel 导出。它包括一种处理失败作业的便捷方法,因此如果需要,我可以通知用户失败(请参阅https://docs.laravel-excel.com/3.1/exports/queued.html#handling-failures-in-queued-exports)。我假设没有一些没有记录的成功方法,或者没有记录在我找不到的地方,所以....

有没有办法使用 Laravel 的排队系统来检测作业何时完成?即使我并不真正知道状态(成功或失败)并且我只知道工作已完成,我也可以检查导出文件是否存在以确认它是否成功触发通知。

谢谢。

【问题讨论】:

    标签: laravel laravel-8 laravel-excel laravel-queue


    【解决方案1】:

    您可以通过将以下代码添加到您的 AppServiceProvider.php 来管理它

    public function boot()
    {
    Queue::before(function (JobProcessing $event) {
    // $event->connectionName
    // $event->job
    // $event->job->payload()
    });
    
    Queue::after(function (JobProcessed $event) {
    // $event->connectionName
    // $event->job
    // $event->job->payload()
    });
    }
    

    更多详情可以参考https://laravel.com/docs/8.x/queues

    【讨论】:

    • 对我的需求来说并不是很理想,因为这只需要一小部分工作。我希望有一种特殊的方法可以添加到成功后会被解雇的工作中,就像失败的方法一样,但我想那是不可能的。那么有没有办法告诉 Queue::after() 中的工作是什么,比如工作的类名或其他什么,这样我就可以只过滤我关心的工作而忽略其余的工作。
    【解决方案2】:

    所以虽然@Yudiz Solutions 的答案通常是正确的。我找到了一种更好的方法,专门用于队列中的 Laravel Excel 导出作业,就像我提到的那样。

    我刚刚在文档https://docs.laravel-excel.com/3.1/exports/queued.html#appending-jobs中找到了这个

    因此,虽然没有像失败那样明确的成功方法,但我可以链接到依赖于第一个作业的第二个作业,并让第二个作业处理通知。

    有趣的是,我可能已经在文档中的这一部分滚动了很多次,却没有意识到它在那里,或者它是我需要通知用户成功的答案。

    即使取消作为 Laravel Excel 导出作业的特定上下文,我认为链接这样的成功通知仍然是可能的,并且对于特定于给定作业的任何作业来说,这可能是更好的方法。

    @Yudiz Solutions 的答案更适合通常应该在每个(或至少大多数)作业之后运行的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-03
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      • 2013-12-28
      相关资源
      最近更新 更多