>  기사  >  PHP 프레임워크  >  Laravel 대기열 메일 보내기

Laravel 대기열 메일 보내기

藏色散人
藏色散人앞으로
2019-10-21 13:36:082755검색

대량 이메일, 메시지 알림, SMS, 플래시 세일 등 일괄 처리 작업 시나리오는 우리 개발에서 자주 사용됩니다. 이러한 시간이 많이 걸리는 작업을 처리 대기열에 넣어서 시간을 크게 단축해야 합니다. 웹 요청 및 해당 시간.

다음은 Laravel에서 큐의 사용을 설명합니다

구성 파일 config/queue.php

<?php
return [
    &#39;default&#39; => env(&#39;QUEUE_DRIVER&#39;, &#39;sync&#39;),
    &#39;connections&#39; => [
        &#39;sync&#39; => [
            &#39;driver&#39; => &#39;sync&#39;,
        ],
        &#39;database&#39; => [
            &#39;driver&#39; => &#39;database&#39;,
            &#39;table&#39; => &#39;jobs&#39;,
            &#39;queue&#39; => &#39;default&#39;,
            &#39;retry_after&#39; => 90,
        ],
        &#39;beanstalkd&#39; => [
            &#39;driver&#39; => &#39;beanstalkd&#39;,
            &#39;host&#39; => &#39;localhost&#39;,
            &#39;queue&#39; => &#39;default&#39;,
            &#39;retry_after&#39; => 90,
        ],
        &#39;sqs&#39; => [
            &#39;driver&#39; => &#39;sqs&#39;,
            &#39;key&#39; => &#39;your-public-key&#39;,
            &#39;secret&#39; => &#39;your-secret-key&#39;,
            &#39;prefix&#39; => &#39;https://sqs.us-east-1.amazonaws.com/your-account-id&#39;,
            &#39;queue&#39; => &#39;your-queue-name&#39;,
            &#39;region&#39; => &#39;us-east-1&#39;,
        ],
        &#39;redis&#39; => [
            &#39;driver&#39; => &#39;redis&#39;,
            &#39;connection&#39; => &#39;default&#39;,
            &#39;queue&#39; => &#39;default&#39;,
            &#39;retry_after&#39; => 90,
        ],
    ],
    &#39;failed&#39; => [
        &#39;database&#39; => env(&#39;DB_CONNECTION&#39;, &#39;mysql&#39;),
        &#39;table&#39; => &#39;failed_jobs&#39;,
    ],
];

Configuration 파일 동기화 드라이버 sync가 기본적으로 사용됩니다. 데이터베이스, Beanstalkd, Amazon SQS 및 Redis를 포함하여 각 대기열 드라이버의 구성을 이 파일에서 찾을 수 있습니다. 또한 대기열을 중단하는 작업을 위한 널 대기열 드라이버도 포함되어 있습니다. 실패한 구성 항목은 실패한 대기열 작업이 저장되는 데이터베이스 및 데이터 테이블을 구성하는 데 사용됩니다.

다음으로 대기열 작업 클래스를 만들어야 합니다.

큐 태스크 클래스를 생성하면 app/Jobs 디렉터리에 SendEmail.php 파일이 생성됩니다.

php artisan make:job SendEmail
<?php
namespace App\Jobs;
use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Mail;
class SendEmail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    protected $user;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(User $user)
    {
        $this->user = $user;
    }
    /**
     * 执行队列的方法 比如发送邮件
     *
     * @return void
     */
    public function handle()
    {
      $user = $this->user;
      
      Mail::raw(&#39;这里填写邮件的内容&#39;,function ($message){
             // 发件人(你自己的邮箱和名称)
            $message->from(&#39;your_email@163.com&#39;, &#39;yourname&#39;);
            // 收件人的邮箱地址
            $message->to($this->user);
            // 邮件主题
            $message->subject(&#39;队列发送邮件&#39;);
        });
    }
}

태스크 클래스 생성 후 컨트롤러로 이동 큐에 데이터를 추가하려면

메시지를 보내는 컨트롤러를 만들고 디스패치 메서드를 사용하여 작업을 수동으로 배포합니다.

<?php
namespace App\Http\Controllers;
use App\Jobs\SendEmail;
use App\User;
class MessageController extends Controller
{
    public function index()
    {
        $user = User::find(1);
        $this->dispatch(new SendEmail($user));
    }
}

에 작업 클래스의 인스턴스를 전달합니다. 그런 다음 브라우저에 액세스하여 프로젝트를 실행하고 작업을 대기열 중간에 푸시합니다. 그런 다음 Artisan 명령을 사용하여 대기열에 있는 작업을 실행합니다.

php artisan queue:

● queue:work 기본적으로 대기열 요청은 한 번만 실행되며, 요청이 실행되면 종료됩니다. # 🎜🎜#

● queue:listen은 실행 중인 동안에는 수동으로 종료하지 않는 한 항상 요청을 수락할 수 있습니다. queue:work --daemon은 Listen과 ​​동일하지만 다릅니다. 작업에서는 프레임워크를 다시 로드할 필요가 없으며 작업을 직접 실행하므로 일반적으로 대기열 모니터링을 처리하는 데 사용하는 것이 좋습니다.

● 참고: queue:work --daemon을 사용할 경우 코드 업데이트 시 중지했다가 다시 시작해야 수정된 코드가 적용됩니다.

더 많은 Laravel 관련 기술 기사를 보려면

Laravel 프레임워크 시작 튜토리얼

컬럼을 방문하여 알아보세요!

위 내용은 Laravel 대기열 메일 보내기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제