Laavel 처리를 Que에 스택하여 응답 조정

9813 단어 homesteadPHPLaravel

개시하다


상업 논리를 기술하는 기초 위에서 처리를 가속화하는 것이 명제이다.
하지만 이것도 한계가 있다.그럼 어떻게 하면 좋을까요?겉으로 보기에는 좀 일찍 나았으면 좋겠다.
화면상의 조작은 트리거에 남기고 메인 처리는 백엔드에서 처리하면 되잖아!
그래서 Queue를 투입하여 비동기적으로 처리하는 방법을 조사했습니다!

하고 싶은 일


데이터베이스에 쌓인 대기열을 만드는 표를 만들고 화면 조작을 트리거 쌓기로 한다.
스택의 데이터는 일정 시간이 지난 후에 실행됩니다.
비동기적으로 처리하고 싶습니다.

마지막*아날로그 통신을 통해 처리 상태를 파악하고 웹 화면을 업데이트하는 것이 바람직하다.

Que 실행 정보


설치에 들어가기 전에 다음과 같은 설정이 필요합니다.
  • config/queue.php
  • .env
  • database(migration file)
  • config/queue.php


    config/queue.php
    return [
        'default' => env('QUEUE_DRIVER', 'database' /* ここを書き換える */),
    
        'connections' => [
            'sync' => [
                'driver' => 'sync',
            ],
            'database' => [
                'driver'     => 'database',
                'table'      => 'jobs',
                'queue'      => 'default',
                'expire'     => 60,
            ],
            // and more...
        ],
        'failed' => [
            'database' => env('DB_CONNECTION', 'mysql_laravel'),
            'table'    => 'failed_jobs',
        ],
    ];
    

    각각의 설명


    name
    discryption
    sync
    설정되지 않은 경우 기본값입니다.이름처럼 동기화 처리를 하기 때문에Que의 가장 큰 은혜의 비동기 처리를 할 수 없습니다.
    database
    데이터베이스를 작업 대기열로 바꿉니다.비동기 처리는 가능하지만 사전에 이전해야 한다.
    beanstalkd
    이런 .상세한 상황은 불평해 주십시오.
    sqs, iron
    돈 쓸 것 같으니까 패스해.구격
    redis
    메모리 DB 같은 거.나는 이름을 물었지만 상세한 상황은 모른다.메모리 DB로서의 단점을 극복하고 빠르게 처리할 수 있는 모습입니다.과학의 힘은 대단해!
    어쨌든 sync 테스트를 하고 데이터베이스로 설치하는 절차를 해봤습니다.

    .env


    .env
    # ...
    
    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_DATABASE=sample_db
    DB_USERNAME=homestead
    DB_PASSWORD=secret
    
    CACHE_DRIVER=file
    SESSION_DRIVER=file
    # ここを sync->database に書き換える
    QUEUE_DRIVER=database
    
    # ...
    
    여기의 값입니다QUEUE_DRIVER고쳐 쓰다.
    사실 나는 이곳에서 엉망진창으로 빠져 있다.
    라벨 명물 엔비 파일로 울고 있는 거야.
    config 파일을 만들어도 개선되지 않는... 이 있습니다.

    migration


    마이그레이션은 간단합니다. 콘솔에서 다음 명령을 입력하면 됩니다.
    console
    $ php artisan queue:table
    $ php artisan queue:failed-table
    $ php artisan migrate
    

    Que 파일 만들기


    다음은 콘솔에서 임무를 만듭니다.
    console
    $ php artisan make:job SampleJob --queued
    
    여기에'투입된 시간과 실행된 시간을 로그에 토해'라는 아주 간단한 숙제를 만들어 실제 실행해 봤다.
    app/Jobs/SampleJob.php
    namespace App\Jobs;
    
    use App\Jobs\Job;
    use Illuminate\Queue\SerializesModels;
    use Illuminate\Queue\InteractsWithQueue;
    use Illuminate\Contracts\Bus\SelfHandling;
    use Illuminate\Contracts\Queue\ShouldQueue;
    
    class SampleJob extends Job implements SelfHandling, ShouldQueue
    {
        use InteractsWithQueue, SerializesModels;
    
        /**
         * Create a new job instance.
         *
         * @return void
         */
        public function __construct()
        {
            //
        }
    
        /**
         * Execute the job.
         *
         * @return void
         */
        public function handle()
        {
            $queued_at = date('Y-m-d H:i:s');
            sleep(5);
            $dispatched_at = date('Y-m-d H:i:s');
            \Log::info("処理開始 - {$queued_at} ... 処理終了 - {$dispatched_at}");
        }
    }
    
    또한 트리거 시도는 다음과 같다.
    app/routes.php
    Route::get('/queue', function() {
        Queue::push(new \App\Jobs\SampleJob());
        return 'At ' . date('Y-m-d H:i:s') . ' - queue pushed.';
    });
    

    실행


    브라우저에서 지금 가져옵니다.연결해보면.

    이런 그림일 거예요.
    MySQL의 내용을 보십시오.

    이런 느낌이야.
    하지만 이 단계에서는 퀘스트를 수행하는 것이 아니라Que에 의해 쌓여 있습니다.아무리 기다려도 안 해.
    아무튼그런 다음 아래 명령을 클릭하여 Job을 실행합니다.
    console
    $ php artisan queue:work
    
    지금 처리 중입니다.
    한번 해봐.의 내용
    [2017-09-09 00:58:19] local.INFO: 처리 시작 -207-09-09:58:14...처리 종료 -207-09-09:58:19
    이렇게 일지를 잘 토해냈어요.

    감상


    상당히 반했지만 모르는 곳에서 끌리는 것은 흔한 일이다.
    어쨌든 클럽을 사용할 수 있는 환경이 완비됐으니 앞으로는 문서를 보면서 편성하고 싶다.
    결국 지령과 조합해서 일괄 처리를 하고 싶군.

    참고 자료

  • Laavel 5.1 큐
  • Laavel(5.3) 큐 시도
  • 대열부
  • 좋은 웹페이지 즐겨찾기