Laavel 처리를 Que에 스택하여 응답 조정
개시하다
상업 논리를 기술하는 기초 위에서 처리를 가속화하는 것이 명제이다.
하지만 이것도 한계가 있다.그럼 어떻게 하면 좋을까요?겉으로 보기에는 좀 일찍 나았으면 좋겠다.
화면상의 조작은 트리거에 남기고 메인 처리는 백엔드에서 처리하면 되잖아!
그래서 Queue를 투입하여 비동기적으로 처리하는 방법을 조사했습니다!
하고 싶은 일
데이터베이스에 쌓인 대기열을 만드는 표를 만들고 화면 조작을 트리거 쌓기로 한다.
스택의 데이터는 일정 시간이 지난 후에 실행됩니다.
비동기적으로 처리하고 싶습니다.
마지막*아날로그 통신을 통해 처리 상태를 파악하고 웹 화면을 업데이트하는 것이 바람직하다.
Que 실행 정보
설치에 들어가기 전에 다음과 같은 설정이 필요합니다.
데이터베이스에 쌓인 대기열을 만드는 표를 만들고 화면 조작을 트리거 쌓기로 한다.
스택의 데이터는 일정 시간이 지난 후에 실행됩니다.
비동기적으로 처리하고 싶습니다.
마지막*아날로그 통신을 통해 처리 상태를 파악하고 웹 화면을 업데이트하는 것이 바람직하다.
Que 실행 정보
설치에 들어가기 전에 다음과 같은 설정이 필요합니다.
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.phpnamespace 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.phpRoute::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
이렇게 일지를 잘 토해냈어요.
감상
상당히 반했지만 모르는 곳에서 끌리는 것은 흔한 일이다.
어쨌든 클럽을 사용할 수 있는 환경이 완비됐으니 앞으로는 문서를 보면서 편성하고 싶다.
결국 지령과 조합해서 일괄 처리를 하고 싶군.
참고 자료
$ php artisan make:job SampleJob --queued
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}");
}
}
Route::get('/queue', function() {
Queue::push(new \App\Jobs\SampleJob());
return 'At ' . date('Y-m-d H:i:s') . ' - queue pushed.';
});
$ php artisan queue:work
상당히 반했지만 모르는 곳에서 끌리는 것은 흔한 일이다.
어쨌든 클럽을 사용할 수 있는 환경이 완비됐으니 앞으로는 문서를 보면서 편성하고 싶다.
결국 지령과 조합해서 일괄 처리를 하고 싶군.
참고 자료
Reference
이 문제에 관하여(Laavel 처리를 Que에 스택하여 응답 조정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tosite0345/items/a92367e8129d2be4ad53텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)