首页 > 其他 > 详细

Laravel redis队列发送邮件

时间:2019-10-23 18:59:21      阅读:256      评论:0      收藏:0      [点我收藏+]

邮件发送如何配置参考:https://www.cnblogs.com/clubs/p/10640682.html

1. laravel队列配置(配置文件 .env 和 config/queue.php)

优先配置文件 .env 如下:

1 QUEUE_DRIVER=redis
2 
3 REDIS_HOST=127.0.0.1
4 REDIS_PASSWORD=******
5 REDIS_PORT=6379

当.env 文件没有配置 或者 设置变量为空时,则会按照 config/queue.php 文件的配置信息运行laravel
config/queue.php 文件如下:

 1 return [
 2     ‘default‘ => env(‘QUEUE_DRIVER‘, ‘redis‘),//修改队列驱动,使用redis
 3 
 4     ‘connections‘ => [
 5         ‘sync‘ => [
 6             ‘driver‘ => ‘sync‘,
 7         ],
 8 
 9         ‘database‘ => [
10             ‘driver‘ => ‘database‘,
11             ‘table‘ => ‘jobs‘,
12             ‘queue‘ => ‘default‘,
13             ‘retry_after‘ => 90,
14         ],
15 
16         ‘beanstalkd‘ => [
17             ‘driver‘ => ‘beanstalkd‘,
18             ‘host‘ => ‘localhost‘,
19             ‘queue‘ => ‘default‘,
20             ‘retry_after‘ => 90,
21         ],
22 
23         ‘sqs‘ => [
24             ‘driver‘ => ‘sqs‘,
25             ‘key‘ => env(‘SQS_KEY‘, ‘your-public-key‘),
26             ‘secret‘ => env(‘SQS_SECRET‘, ‘your-secret-key‘),
27             ‘prefix‘ => env(‘SQS_PREFIX‘, ‘https://sqs.us-east-1.amazonaws.com/your-account-id‘),
28             ‘queue‘ => env(‘SQS_QUEUE‘, ‘your-queue-name‘),
29             ‘region‘ => env(‘SQS_REGION‘, ‘us-east-1‘),
30         ],
31 
32         ‘redis‘ => [
33             ‘driver‘ => ‘redis‘,
34             ‘connection‘ => ‘default‘,
35             ‘queue‘ => ‘default‘,
36             ‘retry_after‘ => 90,
37             ‘block_for‘ => null,
38         ],
39     ],
40 
41     ‘failed‘ => [
42         ‘database‘ => env(‘DB_CONNECTION‘, ‘mysql‘),
43         ‘table‘ => ‘failed_jobs‘,
44     ],
45 ];

2. 创建队列任务类(app/Jobs/xxx.php)

使用artisan命令 在app/Jobs 目录下创建执行队列任务的类:
php artisan make:job SendEmail
app/Jobs/SendEmailCode.php 代码如下:

 1 <?php
 2 
 3 namespace App\Jobs;
 4 
 5 use Illuminate\Bus\Queueable;
 6 use Illuminate\Queue\SerializesModels;
 7 use Illuminate\Queue\InteractsWithQueue;
 8 use Illuminate\Contracts\Queue\ShouldQueue;
 9 use Illuminate\Foundation\Bus\Dispatchable;
10 use Illuminate\Support\Facades\Mail;
11 use App\Models\RecruitUser as User;
12 
13 class SendEmail implements ShouldQueue
14 {
15     use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
16 
17     protected $user;
18 
19     /**
20      * Create a new job instance.
21      *
22      * @return void
23      */
24     public function __construct(User $user)
25     {
26         $this->user = $user;
27     }
28 
29     /**
30      * Execute the job.
31      *
32      * @return void
33      */
34     public function handle()
35     {
36         $user = $this->user;
37         Mail::raw(‘这里填写邮件的内容‘, function ($message) {
38             // 发件人(你自己的邮箱和名称)
39             $message->from(‘m13760754369@163.com‘, ‘jackie‘);
40             // 收件人的邮箱地址
41             $message->to($this->user->email);
42             // 邮件主题
43             $message->subject(‘队列发送邮件‘);
44         });
45     }
46 }

3. 控制器将数据添加到队列中

 1 <?php
 2 
 3 namespace App\Http\Controllers\Home;
 4 
 5 use App\Jobs\SendEmail;
 6 use App\Http\Controllers\Controller;
 7 use Illuminate\Http\Request;
 8 use App\Models\RecruitUser as User;
 9 
10 class MessageController extends Controller
11 {
12     public function index()
13     {
14         $user = User::find(2);
15         $res = $this->dispatch(new SendEmail($user));
16         dd($res);
17     }
18 
19 }

4. 启动队列

  •  queue:work 默认只执行一次队列请求, 当请求执行完成后就终止;
  •  queue:listen 监听队列请求,只要运行着,就能一直接受请求,除非手动终止;
  •  queue:work --daemon 同listen一样,不同的是work不需要再次加载框架,直接运行任务,一般推荐使用这个来处理队列监听。
  •  php artisan queue:restart 重启队列

5. 设置API路由,执行请求,执行队列任务

1 Route::post(‘messageindex‘, [‘uses‘ => $namespaces . ‘MessageController@index‘, ‘as‘ => ‘messageIndex‘]);

使用postman发送post请求即可以测试发送邮件队列

技术分享图片

 

 查看redis是否有队列数据

技术分享图片

 

 查看邮箱发件箱,邮件已发出

技术分享图片

 

 

6. 使用Supervisor将队列任务启动 添加到守护进程中

推荐安装Supervisor,将 php artisan queue:work —queue sendEmailCode 等一系列队列进程,添加到进程保护中,防止中途崩溃时候,可以自救,哈哈~??
关于Supervisor,可以参考《centos安装Supervisor以及简单配置(添加进程守护)

总结

  1. laravel队列配置(配置文件 .env 和 config/queue.php)
  2. 创建队列任务类(app/Jobs/xxx.php)
  3. 控制器将数据添加到队列中
  4. 启动队列
  5. 设置API路由,执行请求,执行队列任务
  6. 使用Supervisor将队列任务启动 添加到守护进程中

Laravel redis队列发送邮件

原文:https://www.cnblogs.com/clubs/p/11727862.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!