Laravel 5 의 대기 열 설정 및 사용 분석

4779 단어 laravel대열
머리말
대기 열 은 항상 두 가지 장면 에 사용 된다.하 나 는 높 은 병행 상황 이 고 하 나 는 시간 이 걸 리 는 조작 이다.하 나 는 임 무 를 대기 열 에 넣 을 수 있다.소비 자 는 대기 열 에서 임 무 를 수행 할 수 있다.물론 실패 한 상황 을 어떻게 처리 하 는 지,그리고 지연,재 시도,더욱 복잡 한 상황 은 우선 순위 의 실현 도 있다.
Laravel 5 에서 대기 열 을 사용 하 는 것 은 매우 간단 하고 실패 처리,지연,재 시도 방법 이 모두 실현 되 었 습 니 다.다음은 Laravel 의 대기 열 서 비 스 를 간단하게 시도 해 보 겠 습 니 다.
Laravel 은 기본적으로 다음 과 같은 몇 가지 대기 열 서 비 스 를 지원 합 니 다.sync,database,beanstalkd,sqs,본 사례 는redis대기 열 서비스 로 사용 되 며,먼저redis서 비 스 를 설정 해 야 합 니 다.
1.대기 열 서비스 설정
설정 파일 queue.php 의Redis에서 기본적으로 정의 되 었 습 니 다connections의 연결:

'redis' => [
 'driver'  => 'redis',
 'connection' => 'default',
 'queue'  => 'default',
 'expire'  => 60,
],
.env 환경 설정 파일 에서 기본 큐 드라이브 를redis로 변경 합 니 다.

QUEUE_DRIVER=redis
캐 시 설정 의 영향 을 피하 기 위해 다음 명령 을 실행 하여 캐 시 를 지우 고 다시 만 듭 니 다.

php artisan config:cache
2.새로 만 든 Queueable Jobs
사용 명령:

php artisan make:job MyJob
MyJob 이라는 대기 열 처리 클래스 를 새로 만 들 고redis디 렉 터 리 에서 MyJob.php 파일 을 자동 으로 생 성 합 니 다.

MyJob.php 는 대기 열 작업 을 구체 적 으로 수행 하 는 방법App/Jobs을 실현 해 야 합 니 다.구조 함 수 는 필요 한 인 자 를 전달 할 수 있 습 니 다.handle방법 은 의존 주입 을 지원 합 니 다.
여기handle방법 은 마음대로 하 나 를 썼 다.바로 하나의handle유형의 데이터 구조 에 하나의list데 이 터 를 저장 하 는 것 이다.소비 대기 열 을 테스트 할 때 효과 가 있 는 지 없 는 지 를 테스트 하 는 것 이다.구조 함수 전송 두 개의 매개 변 수 는 바로key-valuekey이다.

<?php

namespace App\Jobs;

use App\Jobs\Job;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Redis;

class MyJob extends Job implements ShouldQueue
{
 use InteractsWithQueue, SerializesModels;

 private $key;
 private $value;

 /**
  * Create a new job instance.
  *
  * @return void
  */
 public function __construct($key, $value)
 {
  $this->key = $key;
  $this->value = $value;
 }

 /**
  * Execute the job.
  *
  * @return void
  */
 public function handle()
 {
  Redis::hset('queue.test', $this->key, $this->value);
 }

 public function failed()
 {
  dump('failed');
 }
}
컨트롤 러 에서value방법 으로 대기 열 을 호출 하고 작업 을 대기 열 에 넣 습 니 다.컨트롤 러 에dispatch와 같은 방법 을 쓰 고public function test()의 구조 함수 로 무 작위 로 생 성 된 문자열 인 자 를 전달 합 니 다.

$queueId = $this->dispatch(new MyJob('key_'.str_random(4), str_random(10)));
dd($queueId);
루트 를 설정 하고 접근 하면 몇 번 더 접근 할 수 있 습 니 다.그리고new MyJob에서 보면 대기 열 을Redis구조 에 저장 한 것 을 발견 할 수 있 습 니 다.

그 중에서queue::queue:default내용 은 다음 과 같다.이것 은List형식 으로 바 뀌 었 고 실제 적 으로 시리 얼 번 호 를 거 친 문자열 이다.

{
 "job": "Illuminate\\Queue\\CallQueuedHandler@call",
 "data": {
  "command": "O:14:\"App\\Jobs\\MyJob\":6:{s:19:\"\u0000App\\Jobs\\MyJob\u0000key\";i:1;s:21:\"\u0000App\\Jobs\\MyJob\u0000value\";i:2;s:10:\"connection\";N;s:5:\"queue\";N;s:5:\"delay\";N;s:6:\"\u0000*\u0000job\";N;}"
 },
 "id": "EV2bhqUlx0T8pRCVHw1qT0fkP8AQcyI8",
 "attempts": 1
}
여기value매개 변수 에는 대기 열 서비스json의 이름,구조 함수 의 매개 변수 등 정보,소비자 가 임 무 를 수행 하 는 근거 가 포함 되 어 있다.data재 시도 횟수 를 표시 합 니 다.대기 열 작업 을 수행 하 는 데 실패 하면 재 시도 합 니 다.최대 시도 횟수 를 설정 할 수 있 습 니 다.
3.소비 대열
이때 작업 은 대기 열 에 들 어 갔 을 뿐 소비 하지 않 았 습 니 다.실행:

php artisan queue:listen
이 명령 은 Laravel 이 소비 대열 을 시작 했다.

이 몇 가지 임 무 를 통 해 소 비 된 것 을 볼 수 있 고Job가서 기대 하 는 효 과 를 실현 하 는 지,각 임 무 는 하나의attempts유형의 구조 로 데 이 터 를 기록 할 수 있다.

이것 은 대열 임무 소비 가 성공 했다 는 것 을 증명 한다.
총결산
본 논문 의 내용 은 여기까지 입 니 다.물론 Laravel 대열 의 용법 도 더 있 으 니 공식 매 뉴 얼 을 계속 참고 하 시기 바 랍 니 다.이 글 의 내용 이 여러분 들 이 Laravel 을 배 우 는 데 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기