Laravel 5 의 대기 열 설정 및 사용 분석
대기 열 은 항상 두 가지 장면 에 사용 된다.하 나 는 높 은 병행 상황 이 고 하 나 는 시간 이 걸 리 는 조작 이다.하 나 는 임 무 를 대기 열 에 넣 을 수 있다.소비 자 는 대기 열 에서 임 무 를 수행 할 수 있다.물론 실패 한 상황 을 어떻게 처리 하 는 지,그리고 지연,재 시도,더욱 복잡 한 상황 은 우선 순위 의 실현 도 있다.
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-value
과key
이다.
<?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 을 배 우 는 데 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.