laravel 队列的延迟分发delay用法
如果让我们指定调度任务在 10 分钟后他被调度后才执行,在这之前它将是无效的,您可以使用以下代码来实现您想要的效果:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Jobs\ProcessPodcast;
use Illuminate\Http\Request;
class PodcastController extends Controller
{
/**
* Store a new podcast.
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
// Create podcast...
ProcessPodcast::dispatch($podcast)
->delay(now()->addMinutes(10));
//或者直接时间戳形式
ProcessPodcast::dispatch($podcast)
->delay(600);
}
}
使用Laravel队列的delay()方法来设置任务的延迟时间,以在特定时间执行该任务。具体来说,您可以使用以下代码来实现您想要的效果:
use App\Jobs\ProcessPodcast;
use Carbon\Carbon;
...
// 计算今天14点50的时间
$now = Carbon::now();
$sendTime = Carbon::create($now->year, $now->month, $now->day, 14, 50, 0);
// 如果当前时间已经过了今天14点50,则将任务延迟到明天14点50
if ($now->gt($sendTime)) {
$sendTime->addDay();
}
// 将任务分发到队列中,并将其延迟到指定的时间
ProcessPodcast::dispatch($podcast)->delay($sendTime);
如果您已经有一个时间戳,并希望在该时间戳的基础上提前15分钟执行任务,可以使用Carbon类中的createFromTimestamp()方法来创建对应的时间对象,并使用subMinutes()方法将该时间对象提前15分钟。以下是一个实现示例:
use App\Jobs\ProcessPodcast;
use Carbon\Carbon;
...
// 假设您已经有一个时间戳 $timestamp
$sendTime = Carbon::createFromTimestamp($timestamp)->subMinutes(15);
// 将任务分发到队列中,并将其延迟到指定的时间
ProcessPodcast::dispatch($podcast)->delay($sendTime);
如果您已经有一个时间戳,并希望在该时间戳的基础上延迟15分钟执行任务,可以使用Carbon类中的createFromTimestamp()方法来创建对应的时间对象,并使用addMinutes()方法将该时间对象延迟15分钟。以下是一个实现示例:
use App\Jobs\ProcessPodcast;
use Carbon\Carbon;
...
// 假设您已经有一个时间戳 $timestamp
$sendTime = Carbon::createFromTimestamp($timestamp)->addMinutes(15);
// 将任务分发到队列中,并将其延迟到指定的时间
ProcessPodcast::dispatch($podcast)->delay($sendTime);