Laavel의 Quee 및 Job을 사용하여 메시지 보내기

24169 단어 LaravelPHPqueuejobtech

개시하다


이번에는 처음으로 실제 업무에서 라벨의 잡과 큐를 사용해 메일 발송 기능을 실현하고 그 결과를 아제스에서 받는 것을 실현했다.
처음 알았던 게 많고 많이 배워서 정리하고 싶었어요.
릴리즈
Laravel 7.30.4

Job 및 Que


먼저 Larevel의 공식 문서를 검토합니다.
Laravel 7.대열
대기열은 대기열에 추가된 작업의 스택이거나 누적된 작업입니다.
queue 연결 파일의queue 속성을 포함하여 모든 연결 설정 예시를 주의하십시오.이것은 지정한 연결에 작업이 할당될 때의 기본 대기열입니다.다시 말하면, 어떤 대기열에 할당할 작업을 명확하게 정의하지 않으면, 이 작업은 연결 설정의queue 속성에 의해 정의된 대기열로 전송됩니다.
...잘 모르겠어요.
거기서 조금만 더 조사하면 알기 쉬운 기사가 나올 거야!
Laavel에서 Que와 Job의 기초 노트를 사용해 보십시오
간단하게 말하자면,job과Queue는 비동기적으로 처리할 수 있는 기능이다.
그렇다면 비동기적으로 처리할 수 있다면 어떤 장점이 있을까.
간단하고 알기 쉬운 예라면 회원을 가입할 때 메일을 자주 보내는 기능이 있어야 한다.
이 때 비동기적으로 진행되지 않으면 사용자는 메일 발송 처리가 끝날 때까지 화면을 이동할 수 없습니다.
다른 한편, 비동기 처리의 경우 서버 측에서 메일을 보내는 동안 앞에서'로그인 완료'페이지로 이동할 수 있어 사용자에게 큰 도움이 된다.

전면 화면 설치


이번 라벨 프로젝트는 준비됐습니다.
나는 기능으로 ID와 PW를 등록하고 그 데이터를 메일로 보내는 처리를 하고 싶다.
먼저 등록 ID와 PW 화면을 만듭니다.
register.blade.php
<h1>会員情報</h1>
<form action="">
    <p>IDを入力</p>
    <input type="text" name="member_id">
    <p>PWを入力</p>
    <input type="text" name="password">
    <p>メールアドレスを入力<p>
    <input type="text" name="email">
    <br><br>
    <button>登録</button>
</form>
web.php
Route::get('/', function () {
    return view('register');
});
화면은 매우 간단하다.

또 발송 후 움직이는 화면도 만들어야 한다.
finish.blade.php
<!doctype html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Fin</title>
</head>
<body>
<h1>登録が完了しました!</h1>
</body>
</html>

서버 측 설치


나는 먼저 members표를 한 장 준비한다.
members_table.php
class CreateMembersTable extends Migration
{
    public function up()
    {
        Schema::create('members', function (Blueprint $table) {
            $table->id();
            $table->string("member_id");
            $table->string("password");
	    $table->string("email");
            $table->timestamps();
        });
    }
그런 다음 Controller를 만듭니다.
MemberController
function index() {
        return view('register');
    }

    function store(Request $request) {
        $data = $request->all();
    }
방금 홈페이지였어요.php로register를 씁니다.balde.php 화면을 뒤집었지만 Controller로 바꿨어요.
web.php
Route::get('/', 'App\Http\Controllers\MemberController@index');
Route::post('register', 'App\Http\Controllers\MemberController@store')->name('register');
그리고,register.blade.php의form 탭을 다시 씁니다.
register.blade.php
<form method="POST" action="{{ route('register') }}">
省略
</form>
이렇게 간단한 회원 로그인 형식이 완성되었습니다.

그림 메일 발송 처리


다음은 메일을 보내는 처리입니다.
로컬에서는 사실상 메일을 보낼 수 없기 때문에 이번에는 메일 트랩을 활용한다.
MailTrap을 사용하는 방법은 이전에 쓴 적이 있으니 여기를 참조하세요.
Laavel에서 MailTrap을 사용하고 로컬 환경에서도 메일을 테스트하여 보내는 방법
RegistrationMail.php
 protected $data;

    public function __construct($data)
    {
        $this->data = $data;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this
            ->from('[email protected]')
            ->subject('会員登録完了')
            ->view('mail')
            ->with(['data' => $this->data]);
    }
mail.blade.php
会員登録が完了しました。
ID: {{ $data->member_id }}
PW: {{ $data->password }}
우편물의 발송 처리에 관해서는 상세한 설명을 하지 않는다.
RegistrationMail.php에 ID와 PW를 추가한 $data는 메일 본문에서 사용with하여 상대방에게 전달할 수 있으며, 메일 본문은 메일입니다.blade.php에 view라는 표시줄이 mail로 지정되어 있기 때문이다.

Job에 처리 쓰기


드디어 이번 주제 잡의 차례가 왔다.
일단env의 QUEUE_CONNECTION는 다음과 같이 변경되었다.
QUEUE_CONNECTION=database
이어서 작업 저장에 사용되는jobs표를 만듭니다.
php artisan queue:table
마이그레이션 수행
php artisan migrate
이것으로jobs표를 만들었습니다.
다음은 작업 종류를 만듭니다.
php artisan make:job SendMail
그리고 새로 생성된 작업은 다음과 같이 편집됩니다.
SendMail.php
 public function handle()
    {
        Mail::to($this->data['email'])->send(new RegistrationMail($data));
    }
그런 다음 컨트롤러의 store 메서드에 Job을 추가로 사용하는 방법이 설명되어 있습니다.
MemberController
function store(Request $request) {
        $data = $request->all();
        SendMail::dispatch($data);

        return view('finish');
    }
이렇게 하면 형식적으로 입력한 값을 Job을 통해 메일로 보낼 수 있습니다!

최후


이번엔 처음으로 잡과 큐를 사용해 생각보다 쉽게 구현했다.
앞으로도 용도에 맞게 사용하세요!
끝까지 읽어주셔서 감사합니다!

좋은 웹페이지 즐겨찾기