>PHP 프레임워크 >Laravel >라라벨 큐란?

라라벨 큐란?

青灯夜游
青灯夜游원래의
2022-02-14 15:25:423344검색

laravel에서 큐는 작업이 제한된 선형 테이블입니다. 테이블의 프런트 엔드(큐 헤드)에서만 삭제 작업과 큐를 통한 테이블의 백 엔드(큐 테일)에서의 삽입 작업만 허용됩니다. , 개발 사용자는 시간이 많이 걸리는 작업의 처리를 나중으로 연기할 수 있으며, 이는 웹 요청의 응답 속도를 크게 향상시킬 수 있습니다.

라라벨 큐란?

이 튜토리얼의 운영 환경: Windows 7 시스템, Laravel 6 버전, Dell G3 컴퓨터.

laravel에서 대기열 사용

1. 대기열이란 무엇입니까

대기열은 작업이 제한된 선형 테이블입니다. 특별한 점은 프런트 엔드에서만 삭제 작업을 허용한다는 것입니다. 테이블 및 삽입 작업은 테이블의 백엔드에서 수행됩니다. 삽입 작업을 수행하는 끝을 큐의 꼬리라고 하고 삭제 작업을 수행하는 끝을 큐의 헤드라고 합니다.

큐를 사용하면 시간이 많이 걸리는 작업(예: 이메일 보내기)의 처리를 나중에 연기할 수 있습니다. 시간이 많이 걸리는 이러한 작업을 지연하면 웹 요청 응답 속도가 크게 향상될 수 있습니다.

2. 장점

  • 메시지 대기열은 시스템을 분리하고 응답 속도를 향상시키며 시스템 기능은 내부로 집계되고 외부로 공개됩니다.

  • 비동기: 메시지 대기열은 기능적 결합을 줄이고 개발 효율성을 향상시키기 위해 기능을 제거합니다.

  • 피크 감소: 메시지 큐는 다운스트림 소비자의 안정적인 작동을 보장하기 위해 피크를 줄이고 전류를 제한할 수 있습니다.

queue 구성 파일 config/queue.php에 저장됩니다. 이 파일에서는 데이터베이스, Beanstalkd, Amazon SQS, Redis 및 동기화 드라이버(동기화 - 로컬 사용)를 포함하는 프레임워크에 포함된 각 대기열 드라이버에 대한 연결 구성을 찾을 수 있습니다. 여기서는 Redis가 드라이버로 사용되며 Redis 및 관련 확장 프로그램을 설치해야 합니다.

4. 작업


대기열에 무언가를 넣어야 하는데 이를 작업이라고 부를 수 있습니다. Laravel 프레임워크에서 작업을 생성하면 다음 명령이 제공됩니다:

php artisan make:job TestJob
TestJob.php

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.php

php 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.