Laravel中利用队列发送邮件的方法示例

网友投稿 874 2022-05-30

https://www.jb51.net/article/121647.htm

本文主要给大家介绍了关于Laravel中队列发送邮件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:

批量处理任务的场景在我们开发中是经常使用的,比如邮件群发,消息通知,短信,秒杀等等,我们需要将这个耗时的操作放在队列中来处理,从而大幅度缩短Web请求和相应的时间。下面讲解下Laravel中队列的使用

1、配置文件 config/queue.php

?

1

2

3

4

5

6

7

8

9

Laravel中利用队列发送邮件的方法示例

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

return [

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

'connections' => [

'sync' => [

'driver' => 'sync' ,

],

'database' => [

'driver' => 'database' ,

'table' => 'jobs' ,

'queue' => 'default' ,

'retry_after' => 90,

],

'beanstalkd' => [

'driver' => 'beanstalkd' ,

'host' => 'localhost' ,

'queue' => 'default' ,

'retry_after' => 90,

],

'sqs' => [

'driver' => 'sqs' ,

'key' => 'your-public-key' ,

'secret' => 'your-secret-key' ,

'prefix' => 'https://sqs.us-east-1.amazonaws.com/your-account-id' ,

'queue' => 'your-queue-name' ,

'region' => 'us-east-1' ,

],

'redis' => [

'driver' => 'redis' ,

'connection' => 'default' ,

'queue' => 'default' ,

'retry_after' => 90,

],

],

'failed' => [

'database' => env( 'DB_CONNECTION' , 'mysql' ),

'table' => 'failed_jobs' ,

],

];

配置文件默认使用的是同步驱动sync,每一种队列驱动的配置都可以在该文件中找到, 包括数据库, Beanstalkd, Amazon SQS, Redis。 其中还包含了一个null队列驱动用于那些放弃队列的任务。failed配置项用于配置失败队列任务存放的数据库及数据表。 接下来我们需要创建一个队列任务类。具体配置可以参考文档 队列驱动配置

2、创建队列任务类,之后会在app/Jobs目录下生成一个SendEmail.php的文件

?

1

php artisan make:job SendEmail

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

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( '这里填写邮件的内容' , function ( $message ){

// 发件人(你自己的邮箱和名称)

$message ->from( 'your_email@163.com' , 'yourname' );

// 收件人的邮箱地址

$message ->to( $this ->user);

// 邮件主题

$message ->subject( '队列发送邮件' );

});

}

}

任务类创建完之后到控制器 把数据加入到队列

3、创建发送消息的控制器 使用dispatch方法手动分发任务,方法里传一个任务类的实例

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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 ));

}

}

4、然后访问浏览器,运行项目把任务推送到队列中。然后使用Artisan命令,执行队列里的任务

php artisan queue:

queue:work 默认只执行一次队列请求, 当请求执行完成后就终止;

queue:listen 监听队列请求,只要运行着,就能一直接受请求,除非手动终止;

queue:work --daemon同listen一样,不同的是work不需要再次加载框架,直接运行任务,一般推荐使用这个来处理队列监听。

注:使用 queue:work --daemon ,当更新代码的时候,需要停止,然后重新启动,这样才能把修改的代码应用上。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

出现问题去failed_jobs表中查看信息

Laravel

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:强大!Nginx 配置在线一键生成“神器”
下一篇:Vscode 重定向 .exe 文件生成位置
相关文章