微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel Queue 影响 API 函数的执行时间

如何解决Laravel Queue 影响 API 函数的执行时间

我有一个 API 函数,可以将 pdf 文件存储到我的 s3 bucket,然后将 pdf 文件作为附件发送电子邮件

由于这是我第一次,我很困惑,因为根据我的理解,作业是从后台执行的,因此应该不会影响函数的执行时间。

但是,拥有这些作业会使执行时间几乎8 seconds

这是我的功能

    $is_exist = CoachingApplication::where('user_id',$userID)->first();

    if ($is_exist == null) {
        $application = new CoachingApplication();
        $application->user_id = $userID;
        $application->applicant_name = $applicantName;
        $application->attachment = $filename;
        $application->instrument_rate = $instrumentRate;

        if ($application->save()) {
            if ($filename !== 'none') {
                StoreBucketJob::dispatch($userID,$filename,$attachment_fileArray)->delay(Carbon::Now()->addSeconds(3));
            }
            SendEmailJob::dispatch($userID,$userName,$userSlug,$userEmail,$filename)->delay(Carbon::Now()->addSeconds(3));
        }
    }

如果我删除这些作业,函数的执行时间为 469ms

知道为什么这些作业会影响 api 的执行时间吗?

解决方法

默认情况下,队列驱动程序设置为 sync,您可能正在使用它。

这个队列驱动意味着你的作业将在当前进程中执行,不会在实际队列中分派(这在开发过程中非常有用)。

100% 确保您的作业确实是同步执行的一个好方法是将 dd("ok"); 放在您的作业中 handle 方法的第一行。 handle 仅在作业运行时执行,而不是在分派时执行。

可以通过编辑您的 .env 文件(查找 QUEUE_CONNECTION)来更新队列驱动程序。

有许多可用的队列驱动程序,其中一些需要额外的依赖项,因此您应该查看可用的文档 https://laravel.com/docs/8.x/queues

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。