laravel 队列的延迟分发delay用法

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);

你可能感兴趣的:(laravel,laravel,php)