Laravel 대기열을 어떻게 사용하나요? 아래 Laravel튜토리얼 칼럼에서는 라라벨 큐 사용법과 큐 사용 시나리오를 소개하겠습니다.
우선 왜 큐를 사용해야 하는지, 큐를 사용하지 않으면 어떻게 되는지 알아야 합니다! 장점과 단점은 무엇입니까
간단한 시나리오의 몇 가지 예를 들 수 있습니다.
이메일 보내기
이메일을 보낼 때 일반적으로 직면하는 문제는 무엇입니까 ??
큐를 사용하면 어떤 이점이 있나요
클라이언트 응답 향상
전송 시 바로 처리하지 않고 서버에 던져서 큐를 관리하고 예약합니다. 구성에 따라 즉시 전송하거나 전송을 지연하도록 옵션을 사용자 정의할 수 있습니다
내결함성 향상
전송 프로세스 중에 대상이 거부되는 경우가 있습니다. 예를 들어, 대부분의 사람들은 오류 502를 admin@qq.comn
로 보내는 시나리오를 접하게 됩니다.
그러면 이 시나리오는 이메일을 보내는 과정에서 다음 이벤트를 트리거하고 구축할 수 있습니다. 이메일이 성공적으로 전송되면 콜백
지연 보내기, 전송 재시도
전송 빈도를 제어할 수 있습니다 개발자 일괄 전송된 이메일을 사용하는 사람은 필연적으로 문제에 직면하게 됩니다. 즉, 일괄적으로 직접 전송하면, 즉 동시에 많은 수의 이메일을 전송하게 됩니다. 그러면 이메일 서비스 제공업체가 우리의 이메일을 거부하거나 이메일은 휴지통에 들어가 광고
로 식별될 가능성이 높습니다. 따라서 여기에구성, 주파수 제어 및 전송 제어 분리를 달성할 수 있습니다
Others물론 다양한 상황에서 사용할 것입니다
서버 측에서 Excel을 다운로드하세요서버 측 빅 데이터의 비동기 멀티태스킹오류 메시지 처리
드라이버는 Redis
로 설정되어 있습니다. 대기열 및 전달 작업을 빠르게 생성하세요> .env QUEUE_CONNECTION=redis > 在 config/queue.php 中可以找到
# 创建 任务
php artisan make:job ProcessPodcast
자동 생성
class EmailJob implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $data; /** * Create a new job instance. * * @return void */ public function __construct(array $data) { $this->data = $data; } /** * Execute the job. * * @return void */ public function handle() { $service = new EmailService(); // ... 检查当前可用 Mailer // 这里你自定义就好了,这个方法中你可以根据你自己的配置,获取到当前可用的配置 $mailer = $service->getMailer(); // ... 获取当前要发送的数据 $data = $this->data; $service->send($mailer, $data); } }
몇 가지 일반적인 작업
이 작업은 문서에서 찾을 수 있습니다app/Jobs/EmailJob.php
# 延迟 2分钟 发送 # 这里使用的是 Crontab 包 (不过 Laravel 自带) EmailJob::dispatch()->delay(now()->addMinutes(2)); # 立即发送 (不会进入到队列中) EmailJob::dispatchNow();여기의 대기열은 기본적으로 기본 대기열을 사용하며 대기열 서비스를 지정하도록 수정할 수 있습니다
public function __construct(array $data) { # 使用 emailQueue $this->onQueue('emailQueue'); $this->data = $data; }
큐 시작# 重试 5 次 public $tries = 5;시간 초과 기간 설정
/** * 确定任务应该超时的时间 * * @return \DateTime */ public function retryUntil() { return now()->addMinutes(10); }
onQueue를 구성하지 않은 경우 ---queue 매개변수 없이 구성할 수 있습니다
php artisan queue:work --queue=emailQueue
이벤트와 결합하여 분리
Laravel 이벤트는 다음과 같습니다. 또한 queues를 통해서도 구현되었습니다# 创建 Event php artisan make:event FailEvent class FailEvent { use Dispatchable, InteractsWithSockets, SerializesModels; protected $data; protected $tag; /** * @param array $data 投递的数据 * @param string $tag 要操作的事情 */ public function __construct(array $data, string $tag = 'system') { $this->data = $data; $this->tag = $tag; } } # 创建 listener php artisan make:listener FailListener class FailListener { /** * Handle the event. * * @param object $event * @return void */ public function handle(FailEvent $event) { $this->{$event->tag}($event->data); } /** * 处理系统异常 * DateTime: 2021/12/3 11:02 上午 * @param array $data */ public function system(array $data) { } /** * 处理邮件异常 * DateTime: 2021/12/3 11:02 上午 */ public function email() { } } # app/Providers/EventServiceProvider.php protected $listen = [ FailEvent::class => [ FailListener::class, ], ] # 投递 event(new FailEvent(['error' = '异常信息'], 'email'));
List
Event
또는Job
Sorted Set은 시간을 Sorted로 설정할 수 있습니다. Set
은 최근에 실행하려는 대기열 작업을 찾기 위해 점수별로 정렬됩니다세상에 완벽한 해결책은 없습니다. 자신에게 가장 적합한 솔루션만 있을 뿐입니다. 직장에서 문제가 발생하면 하나의 예에서 추론하는 방법을 배우고, 다양한 도구를 합리적으로 사용하고, 이를 달성하기 위한 솔루션을 설계하십시오. 코드는 단지 최종적인 축소판일 뿐입니다. 마지막은 이해하는 법을 배우는 것입니다. 각 언어와 각 프레임워크는 단지 솔루션의 구현일 뿐입니다. 이를 마스터해야만 무적이 될 수 있습니다...
더 많은 프로그래밍 관련 지식을 보려면 , 다음 페이지를 방문하세요: 프로그래밍 소개 ! !
위 내용은 Laravel의 큐 메커니즘에 대해 이야기하고 큐의 사용 시나리오를 이해해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!