laravel에서 큐는 작업이 제한된 선형 테이블입니다. 테이블의 프런트 엔드(큐 헤드)에서만 삭제 작업과 큐를 통한 테이블의 백 엔드(큐 테일)에서의 삽입 작업만 허용됩니다. , 개발 사용자는 시간이 많이 걸리는 작업의 처리를 나중으로 연기할 수 있으며, 이는 웹 요청의 응답 속도를 크게 향상시킬 수 있습니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, Laravel 6 버전, Dell G3 컴퓨터.
1. 대기열이란 무엇입니까
대기열은 작업이 제한된 선형 테이블입니다. 특별한 점은 프런트 엔드에서만 삭제 작업을 허용한다는 것입니다. 테이블 및 삽입 작업은 테이블의 백엔드에서 수행됩니다. 삽입 작업을 수행하는 끝을 큐의 꼬리라고 하고 삭제 작업을 수행하는 끝을 큐의 헤드라고 합니다.
큐를 사용하면 시간이 많이 걸리는 작업(예: 이메일 보내기)의 처리를 나중에 연기할 수 있습니다. 시간이 많이 걸리는 이러한 작업을 지연하면 웹 요청 응답 속도가 크게 향상될 수 있습니다.
2. 장점
메시지 대기열은 시스템을 분리하고 응답 속도를 향상시키며 시스템 기능은 내부로 집계되고 외부로 공개됩니다.
비동기: 메시지 대기열은 기능적 결합을 줄이고 개발 효율성을 향상시키기 위해 기능을 제거합니다.
피크 감소: 메시지 큐는 다운스트림 소비자의 안정적인 작동을 보장하기 위해 피크를 줄이고 전류를 제한할 수 있습니다.
queue 구성 파일 config/queue.php에 저장됩니다. 이 파일에서는 데이터베이스, Beanstalkd, Amazon SQS, Redis 및 동기화 드라이버(동기화 - 로컬 사용)를 포함하는 프레임워크에 포함된 각 대기열 드라이버에 대한 연결 구성을 찾을 수 있습니다. 여기서는 Redis가 드라이버로 사용되며 Redis 및 관련 확장 프로그램을 설치해야 합니다.
4. 작업 대기열에 무언가를 넣어야 하는데 이를 작업이라고 부를 수 있습니다. Laravel 프레임워크에서 작업을 생성하면 다음 명령이 제공됩니다: php artisan make:job TestJob
namespace App\Jobs;use Illuminate\Bus\Queueable;use Illuminate\Contracts\Queue\ShouldBeUnique;use Illuminate\Contracts\Queue\ShouldQueue;use Illuminate\Foundation\Bus\Dispatchable;use Illuminate\Queue\InteractsWithQueue;use Illuminate\Queue\SerializesModels;use Illuminate\Support\Facades\DB;use Symfony\Polyfill\Intl\Idn\Info;class TestJob implements ShouldQueue{ use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; /** * Create a new job instance. * * @return void */ public function __construct() { // } /** * Execute the job. * * @return void */ public function handle() {// \Log::info('hhh'); DB::connection('test') ->table('master') ->insert([ 'name'=>'小白', 'email'=>'123@qq.com' ]); }}
5. Distribution
작업 클래스가 작성되면 작업 자체의 디스패치 메서드를 사용할 수 있습니다. 그것을 파견하기 위해. 디스패치 메서드에 전달된 매개변수는 작업 생성자에 전달됩니다. :Onqueue: 대기열 지정; Dlay: 지연 대기열; DispatchNow: 동기식 스케줄링; Consumption
6. 새로 푸시된 작업을 대기열에 처리합니다. Artisan 명령어 queue:work로 큐 프로세서를 시작하세요. queue:work 명령이 시작되면 수동으로 중지하거나 터미널을 닫을 때까지 계속 실행됩니다.
php artisan queue:work
php artisan queue:work --once 매개변수 추가, 소비 대기열을 지정합니다
#在路由中简单调用 Route::get('queue',function(){ \App\Jobs\TestJob::dispatch(); // \App\Jobs\TestJob::dispatch()->onQueue('qq'); });
두 개의 새로운 데이터가 데이터베이스에 추가되고 redis의 데이터가 소비된 것을 볼 수 있습니다
라우팅을 다시 실행합니다
7. 이벤트 큐
큐는 일반적으로 지연된 작업을 처리하는 데 사용되며 이벤트는 비즈니스 로직에 의해 처리됩니다. Laravel의 이벤트 트리거는 비동기식 비즈니스 처리를 위해 대기열에 배포되므로 사용자에게 프롬프트 메시지를 보내기 전에 실시간으로 실행 결과를 기다리지 않고 빠르게 응답할 수 있습니다.
이벤트의 비즈니스를 대기열에 저장해야 하는 경우 대기열을 재배포할 필요가 없습니다. 해당 리스너에서 IlluminateContractsQueueShouldQueue 인터페이스를 직접 구현할 수 있습니다.이벤트 및 리스너 생성
#消费qq队列 php artisan queue:work --queue=qq
appprovidersEventServiceProvider.php
TestListener.phpphp artisan make:event TestEvent
php artisan make:listener TestListener
namespace App\Listeners;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\DB;
class TestListener implements ShouldQueue
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param object $event
* @return void
*/
public function handle()
{
DB::connection('test')
->table('master')
->insert([
'name'=>'小黑',
'email'=>'234@qq.com'
]);
}
}
소비 대기열
Route::get('queue',function(){ //\App\Jobs\TestJob::dispatch(); //指定队列名称 //\App\Jobs\TestJob::dispatch()->onQueue('qq'); return event(new \App\Events\TestEvent()); });
【관련 추천: laravel 비디오 튜토리얼】
위 내용은 라라벨 큐란?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!