laravel队列延迟问题

发布于 2022-09-07 16:23:09 字数 1545 浏览 38 评论 0

控制器

<?php

namespace App\Http\Controllers\User;

use App\Jobs\SendReminderEmail;
use App\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;

class JobsController extends Controller
{
    //
    public function jobs()
    {
        $user = User::find(1);
        $this->dispatch((new SendReminderEmail($user))->delay(now()->addSeconds(30)));#延迟30秒
    }
}

队列文件

<?php

namespace App\Jobs;

use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Log;

class SendReminderEmail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $user;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(User $user)
    {
        $this->user = $user;
        //
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        //
        Log::info('我是来自队列,发送了一个邮件', ['id' => $this->user->id, 'name' => $this->user->name]);
    }

    public function fail($exception = null)
    {

    }
}

我在控制器中设置了当请求过来的时候触发队列,我看delay好像应该是延迟,然后我设置的是30秒执行,为嘛当我请求玩了以后,立马去看日志马上就有数据被输出到laravel.log,而不是30秒后才被输出。用的数据库队列

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

海的爱人是光 2022-09-14 16:23:09

这就要先看你的 .env 文件中是 QUEUE_DRIVER 的值是啥,如果是sync的话,那delay执行是无效的,都是直接马上执行,如果需要异步延迟执行,需要修改为其它 databasebeanstalkdsqsredis中的一种了,修改之后,还需要启动任务监听

php artisan queue:listen
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文