1 回答

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊
有幾種方法可以實(shí)現(xiàn)這一目標(biāo)。在派遣工作之前,您可以添加delay它。例子:
use App\Http\Request;
use App\Jobs\SendEmail;
use App\Mail\VerifyEmail;
use Carbon\Carbon;
/**
?* Store a newly created resource in storage.
?*
?* @param Request $request
?* @return \Illuminate\Http\RedirectResponse
?* @throws \Symfony\Component\HttpKernel\Exception\HttpException
?*/
public function store(Request $request)
{
? ? $baseDelay = json_encode(now());
? ? $getDelay = json_encode(
? ? ? ? cache('jobs.' . SendEmail::class, $baseDelay)
? ? );
? ? $setDelay = Carbon::parse(
? ? ? ? $getDelay->date
? ? )->addSeconds(10);
? ? cache([
? ? ? ? 'jobs.' . SendEmail::class => json_encode($setDelay)
? ? ], 5);
? ? SendEmail::dispatch($user, new VerifyEmail($user))
? ? ? ? ?->delay($setDelayTime);
}
或者,如果您不喜歡某個(gè)工作的想法,您也可以通過 推遲它Mail。例子:
Mail::to($user)->later($setDelayTime);
最后通過 Redis 速率限制。例子:
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Redis;
/**
?* Execute the job.
?*
?* @return void
?*/
public function handle()
{
? ? Redis::throttle('SendEmail')
? ? ? ? ->allow(1)
? ? ? ? ->every(10)
? ? ? ? ->then(function () {
? ? ? ? ? ? Mail::to($this->user)->send($this->mail);
? ? ? ? }, function () {
? ? ? ? ? ? return $this->release(10);
? ? ? ? });
}
允許每十秒發(fā)送一封電子郵件。傳遞給throttle() 方法的字符串SendEmail 是唯一標(biāo)識受速率限制的作業(yè)類型的名稱。您可以將其設(shè)置為您想要的任何值。
release() 方法是作業(yè)類的繼承成員,它指示 Laravel 在無法獲得鎖的情況下將作業(yè)釋放回隊(duì)列,并可選擇以秒為單位的延遲。當(dāng)作業(yè)被分派到隊(duì)列時(shí),Redis 被指示每十秒僅運(yùn)行一個(gè) SendEmail 作業(yè)。
- 1 回答
- 0 關(guān)注
- 99 瀏覽
添加回答
舉報(bào)