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.phpcreate().
나는 여기에 답장하기 전에 우편물을 대열에 보내면 된다고 생각한다.
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와 같은 프로세스 모니터가 필요합니다.
이런 느낌은 클럽의 구조로 이해하기 쉽지만, 실현을 하려면 라벨이 어려운 기구를 쉽게 쓸 수 있을 것 같다.
공식 문서에 따라 더 자세한 설정을 할 수 있으니 조사해 주세요.그럼!
추기
원래 라벨의 메일 발송 기능도 큐를 사용한 것 같아서 지루해지겠지...

좋은 웹페이지 즐겨찾기