Laavel로 줄을 서보도록 하겠습니다.
12983 단어 Laravellaravel5.7
클럽입니다.FIFO.먼저 들어가, 먼저.백스테이지에서 무거운 처리를 하려고 할 때는 매우 편리하다.라벨도 당연히 준비했지.나는 이번에 그 대기열로 메일 발송 기능을 실현하고 싶다.Laavel 버전은 5.7을 사용합니다.라벨의 대기열 운전사로는 데이터베이스, 레디스, 아마존 SQS 등이 있지만 이번에는 데이터베이스 대기열을 사용해 보려고 한다.
우선 라벨의 프로젝트 제작이다.
$ composer create-project --prefer-dist laravel/laravel queue-sample
Valet을 사용하여 액세스해 보십시오.사용자 등록 기능을 만들고 등록 후 대기열을 사용하여 등록 완료 메일을 보냅니다.
이전하기 전에 데이터베이스를 준비하고
.env
에 연결 정보를 기술합니다.$ php artisan make:auth
$ php artisan migrate
화면 오른쪽 상단에 두 개의 링크가 표시되어 있다.
이번에는 로그인 화면을 사용했다.
이 화면에서 사용자를 등록할 수 있습니다.
등록시
app/Http/Controllers/Auth/RegisterController.php
내create()
.나는 여기에 답장하기 전에 우편물을 대열에 보내면 된다고 생각한다.
app/Http/Controllers/Auth/RegisterController.php
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
그 전에도 메일 발송 처리의 유형을 만들어야 한다.$ php artisan make:mail UserRegistered --markdown=emails.user.registered
app/Mail/UserRegistered.php<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\User;
class UserRegistered extends Mailable
{
use Queueable, SerializesModels;
protected $user;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct(User $user)
{
$this->user = $user;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->markdown('emails.user.registered')
->subject('ご登録ありがとうございました')
->with(['user' => $this->user]);
}
}
resources/views/emails/user/registered.blade.php@component('mail::message')
{{ $user->name }} 様
ご登録ありがとうございました。
{{ config('app.name') }}
@endcomponent
이렇게 준비됐습니다.다음은 대열이다.
https://laravel.com/docs/5.7/queues
https://readouble.com/laravel/5.7/ja/queues.html
config/queue.php
에 큐를 설정합니다.그러나 이번에도 기본 상태
.env
로 대기열 드라이버를 데이터베이스로 변경했습니다.QUEUE_CONNECTION=database
다음은 대열용 탁자를 만들자.아티시안 지령이 준비되어 있어서 편리해요.하나는 대기열의 작업표이고, 다른 하나는 실패한 작업을 수행하는 표이다.
$ php artisan queue:table
$ php artisan queue:failed-table
$ php artisan migrate
대기열로 무엇을 처리하는지 설명하는 작업 종류를 만듭니다.$ php artisan make:job SendRegisteredMail
생성된 작업 범주app/Jobs
는 다음과 같습니다.SendRegisteredMail.php
구조기와 handle()
방법이 준비되어 있다.구조기로 작업에 필요한 데이터를 전달한 다음
handle()
으로 실제 하고 싶은 처리를 한다.app/Jobs/SendRegisteredMail.php
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use App\User;
use App\Mail\UserRegistered;
use Illuminate\Support\Facades\Mail;
class SendRegisteredMail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $user;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(User $user)
{
$this->user = $user;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Mail::to($this->user->email)->send(new UserRegistered($this->user));
}
}
그리고 사용자 등록 부분에 발행 대기열 처리를 추가합니다.실행 임무 클래스의
dispatch()
.app/Http/Controllers/Auth/RegisterController.php
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use App\Jobs\SendRegisteredMail;
class RegisterController extends Controller
{
〜〜〜〜〜
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
SendRegisteredMail::dispatch($user);
return $user;
}
}
그러면 사용자가 로그인하면 메일을 보내는 대기열을 발행합니다.하지만 이러면 클럽을 꺼내서 처리할 수 없다.
쿠바에서 감시대열이 필요합니다.
따라서 Artiisan 명령을 사용하여 큐브를 시작합니다.
$ php artisan queue:work
이렇게 하면 대열이 감시되고 처리될 것이다.사용자가 등록하면 메일이 발송되었는지 확인할 수 있을 것 같습니다.쿠바의 컨트롤러에서도 다음과 같이 출력된다.
재시도가 실패했을 때 설정한 횟수입니다.
$ php artisan queue:work
[2019-01-30 02:00:00][2] Processing: App\Jobs\SendRegisteredMail
[2019-01-30 02:00:00][2] Processed: App\Jobs\SendRegisteredMail
공식 문서에서 설명한 대로 큐브를 지속적으로 실행하기 위해서는 Supervisor와 같은 프로세스 모니터가 필요합니다.이런 느낌은 클럽의 구조로 이해하기 쉽지만, 실현을 하려면 라벨이 어려운 기구를 쉽게 쓸 수 있을 것 같다.
공식 문서에 따라 더 자세한 설정을 할 수 있으니 조사해 주세요.그럼!
추기
원래 라벨의 메일 발송 기능도 큐를 사용한 것 같아서 지루해지겠지...
Reference
이 문제에 관하여(Laavel로 줄을 서보도록 하겠습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kiyc/items/a13397af06e72e071e5f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)