php redis 队列邮件,Laravel redis队列发送邮件

本文详细介绍了Laravel框架中如何配置和使用队列,包括.env和config/queue.php的配置,创建队列任务类,将任务添加到队列,启动队列服务,以及通过Supervisor进行守护进程管理。示例展示了如何创建一个发送邮件的队列任务,并通过API路由触发执行。最后,建议使用Supervisor确保队列任务的稳定运行。
摘要由CSDN通过智能技术生成

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

优先配置文件 .env 如下:

1 QUEUE_DRIVER=redis2

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 <?php2

3 namespace App\Jobs;4

5 useIlluminate\Bus\Queueable;6 useIlluminate\Queue\SerializesModels;7 useIlluminate\Queue\InteractsWithQueue;8 useIlluminate\Contracts\Queue\ShouldQueue;9 useIlluminate\Foundation\Bus\Dispatchable;10 use Illuminate\Support\Facades\Mail;11 use App\Models\RecruitUser asUser;12

13 class SendEmail implementsShouldQueue14 {15 use Dispatchable, InteractsWithQueue, Queueable,SerializesModels;16

17 protected $user;18

19 /**20 * Create a new job instance.21 *22 * @return void23 */

24 public function __construct(User $user)25 {26 $this->user = $user;27 }28

29 /**30 * Execute the job.31 *32 * @return void33 */

34 public functionhandle()35 {36 $user = $this->user;37 Mail::raw(‘这里填写邮件的内容‘, function ($message) {38 //发件人(你自己的邮箱和名称)

39 $message->from([email protected], ‘jackie‘);40 //收件人的邮箱地址

41 $message->to($this->user->email);42 //邮件主题

43 $message->subject(‘队列发送邮件‘);44 });45 }46 }

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

1 <?php2

3 namespace App\Http\Controllers\Home;4

5 useApp\Jobs\SendEmail;6 useApp\Http\Controllers\Controller;7 useIlluminate\Http\Request;8 use App\Models\RecruitUser asUser;9

10 class MessageController extendsController11 {12 public functionindex()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 . [email protected], ‘as‘ => ‘messageIndex‘]);

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

9c2817cc4ac8a74930bbe5406d8ed161.png

查看redis是否有队列数据

d396bade3f3befd77c605df91ce7f9b7.png

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

6eb62dbb7a370a67d601321800d33d8a.png

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

推荐安装Supervisor,将 php artisan queue:work —queue sendEmailCode 等一系列队列进程,添加到进程保护中,防止中途崩溃时候,可以自救,哈哈~??

关于Supervisor,可以参考《centos安装Supervisor以及简单配置(添加进程守护)》

总结

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

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

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

启动队列

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值