Laravel, dispatchAfterResponse 不释放前端请求

Laravel, dispatchAfterResponse does not release frontend request

我正在尝试在 laravel 中实现异步作业,因此我可以发送电子邮件(使用第 3 方 API),但让用户进入前端,这样请求就不会等待电子邮件将被寄出。 我正在使用 Laravel 6.18.

所以我用 php artisan make:job EmailJob

创建了通用作业

我设置了 60 秒的休眠时间作为发送长邮件的测试。

然后在我的控制器中

   EmailJob::dispatchAfterResponse();
   return response()->json($obj,200);

在 chrome 控制台,我可以看到有 200 个响应,但是请求仍然没有解决,也没有返回数据,所以我的 ajax/axios 请求仍在等待完整响应,最终它超时(60 秒太长),并在前端产生错误。

所以问题是,发送完整响应后如何执行作业?

您必须更改队列驱动程序和 运行 queue:worker

以下 2 项资源会对您有所帮助

  1. https://laravel-news.com/laravel-jobs-and-queues-101
  2. https://laravel.com/docs/6.x/queues#connections-vs-queues