laravel队列延迟问题
控制器
<?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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这就要先看你的 .env 文件中是
QUEUE_DRIVER
的值是啥,如果是sync
的话,那delay执行是无效的,都是直接马上执行,如果需要异步延迟执行,需要修改为其它database
,beanstalkd
,sqs
,redis
中的一种了,修改之后,还需要启动任务监听