laravel redis队列 邮件推送

1:首先我们先使用  Composer 安装依赖:

$ composer require "predis/predis:~1.0"

2:在配置文件中配置默认队列驱动为Redis,队列配置文件是config/queue.php

return [

    'default' => env('QUEUE_DRIVER', 'sync'),

    'connections' => [
        'sync' => [
            'driver' => 'sync',
        ],
        'database' => [
            'driver' => 'database',
            'table' => 'jobs',
            'queue' => 'default',
            'expire' => 60,
        ],
        'beanstalkd' => [
            'driver' => 'beanstalkd',
            'host' => 'localhost',
            'queue' => 'default',
            'ttr' => 60,
        ],
        'sqs' => [
            'driver' => 'sqs',
            'key' => 'your-public-key',
            'secret' => 'your-secret-key',
            'queue' => 'your-queue-url',
            'region' => 'us-east-1',
        ],
        'iron' => [
            'driver' => 'iron',
            'host' => 'mq-aws-us-east-1.iron.io',
            'token' => 'your-token',
            'project' => 'your-project-id',
            'queue' => 'your-queue-name',
            'encrypt' => true,
        ],
        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
            'queue' => 'default',
            'expire' => 60,
        ],
    ],

    'failed' => [
        'database' => 'mysql', 'table' => 'failed_jobs',
    ],
];

该配置文件第一个配置项default用于指定默认的队列驱动,这里我们将其值改为redis

3:创建失败进程记录表

$ php artisan queue:failed-table
$ php artisan migrate

4:接下来创建任务类

php artisan make:job SendReminderEmail

运行成功后会在app/Jobs目录下生成一个SendReminderEmail.php,我们修改其内容如下:

<?php

namespace App\Jobs;

use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Mail\Mailer;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class SendReminderEmail implements ShouldQueue
{
    use 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(Mailer $mailer)
    {
        $user = $this->user;
        $mailer->send('emails.reminder',['user'=>$user],function($message) use ($user){
            $message->to($user->email)->subject('新功能发布');
        });

    }
}

5:下面我们创建邮件局部视图resources/views/emails/reminder.blade.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>test</title>


</head>
<body>
<div class="flex-center position-ref full-height">
    试验成功
</div>
</body>
</html>

6:在controller里写一个正常的访问请求

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Mail;
use Storage;
use App\User;
use App\Jobs\SendReminderEmail;

class MailController extends Controller
{
    //其他方法

    //发送提醒邮件
    public function sendReminderEmail(Request $request,$id){
        $user = User::findOrFail($id);

        $this->dispatch(new SendReminderEmail($user));
    }
}

route

Route::get('/queued/{id}', 'MailController@sendReminderEmail');

7:开启监听队列

php artisan queue:listen

8:配置发送邮箱


9:打开邮箱的pop,具体可自行百度


猜你喜欢

转载自blog.csdn.net/qq_29099209/article/details/79905215