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

前言

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

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

1、配置文件 config/queue.php

<?php

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的文件

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('这里填写邮件的内容',function ($message){
  // 发件人(你自己的邮箱和名称)
  $message->from('your_email@163.com', 'yourname');
  // 收件人的邮箱地址
  $message->to($this->user);
  // 邮件主题
  $message->subject('队列发送邮件');
 });
 }
}

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

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

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

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

php artisan queue:

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

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

总结

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

(0)

相关推荐

  • 在Laravel框架里实现发送邮件实例(邮箱验证)

    在经过一段时间的使用后,发现在项目中很多地方需要用到用户验证,以短信验证和邮箱验证为主流趋势,此篇文章小编给大家总结了如何在Laravel框架中实现发送邮件功能,以后会陆续更上如何实现短信验证..... 在.env文件下 1.配置Laravel文件 MAIL_DRIVER=smtp //建议使用smtp方式 MAIL_HOST=smtp.163.com //建议使用163邮箱 QQ邮箱会有报错 MAIL_PORT=25//smtp 默认为25 MAIL_USERNAME=null //自己的16

  • laravel5.4利用163邮箱发送邮件的步骤详解

    前言 其实发送邮箱其实不难,不如说挺简单的,本文将详细介绍关于laravel5.4用163邮箱发送邮件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 一.首先还是现在163注册一个账号并且设置如下图 授权码很重要的,请好好记住,待会在laravel的.env中要配置到的-- 二.如果以上你都做完了,那接下来就是配置.env了 MAIL_DRIVER=smtp MAIL_HOST=smtp.163.com MAIL_PORT=465 MAIL_USERNAME=你的账

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

    前言 本文主要给大家介绍了关于Laravel中队列发送邮件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 批量处理任务的场景在我们开发中是经常使用的,比如邮件群发,消息通知,短信,秒杀等等,我们需要将这个耗时的操作放在队列中来处理,从而大幅度缩短Web请求和相应的时间.下面讲解下Laravel中队列的使用 1.配置文件 config/queue.php <?php return [ 'default' => env('QUEUE_DRIVER', 'sync'),

  • Spring Boot中利用JavaMailSender发送邮件的方法示例(附源码)

    快速入门 在Spring Boot的工程中的pom.xml中引入spring-boot-starter-mail依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> 如其他自动化配置模块一样,在完成了依赖引入之后,只需要在applicatio

  • oracle中decode函数的使用方法示例

    decode的几种用法 1:使用decode判断字符串是否一样 DECODE(value,if1,then1,if2,then2,if3,then3,...,else) 含义为 IF 条件=值1 THEN RETURN(value 1) ELSIF 条件=值2 THEN RETURN(value 2) ...... ELSIF 条件=值n THEN RETURN(value 3) ELSE RETURN(default) END IF sql测试 select empno,decode(empn

  • Java中生成唯一ID的方法示例

    有时我们不依赖于数据库中自动递增的字段产生唯一ID,比如多表同一字段需要统一一个唯一ID,这时就需要用程序来生成一个唯一的全局ID. UUID 从Java 5开始, UUID 类提供了一种生成唯一ID的简单方法.UUID是通用唯一识别码 (Universally Unique Identifier)的缩写,UUID来源于OSF(Open Software Foundation,开源软件基金会)的DCE(Distributed Computing Environment,分布式计算环境)规范.UU

  • laravel中Redis队列监听中断的分析

    1.linxu挂起队列监听 nohup php artisan queue:listen --timeout=90 --tries=1 >> /dev/null 2>&1 & 2.发现问题(日志) In Process.php line 429: The process has been sinaled with signal "1". 3.查询资料(linux信号中断) 标志 信号值 默认处理动作 发出信号的原因 SIGHUP 1 A 终端挂起或者控

  • C语言中可变参数的使用方法示例

    前言 在C语言程序编写中我们使用最多的函数一定包括printf以及很多类似的变形体.这个函数包含在C库函数中,定义为 int printf( const char* format, ...); 除了一个格式化字符串之外还可以输入多个可变参量,如: printf("%d",i); printf("%s",s); printf("the number is %d ,string is:%s", i, s); 格式化字符串的判断本章暂且不论,下面分析一

  • Laravel中的where高级使用方法实例讲解

    有时候项目中需要进行多个字段搜索就可以用到此方法 在Laravel中的可以同时使用多个where,所以我们可以每个字段分配一个where() 然后在每个where()中去闭包判断 $username = '';// 收货人姓名 $hospital_id = ''; // 医院id # 判断是否有姓名搜索 if (!empty($request->username)) { $username = $request->username; } # 判断是否有医院搜索 if (!empty($requ

  • 在SpringBoot项目中的使用Swagger的方法示例

    一. 首先Swagger是什么? Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步.Swagger官方API文档:https://swagger.io/ 作用:   1. 接口的文档在线自动生成.   2. 功能测试. Swagger的主见介绍:    Swagger Codegen: 通过Codegen 可

  • MyBatis-Plus中如何使用ResultMap的方法示例

    目录 问题说明 解决方法 自定义@AutoResultMap注解 MyBatis-Plus (简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发.提高效率而生. MyBatis-Plus对MyBatis基本零侵入,完全可以与MyBatis混合使用,这点很赞. 在涉及到关系型数据库增删查改的业务时,我比较喜欢用MyBatis-Plus,开发效率极高.具体的使用可以参考官网,或者自己上手摸索感受一下. 下面简单总结一下在MyBatis-Plus中如何使用R

  • java中的4种循环方法示例详情

    目录 java循环结构 1.while循环 2.do-while循环 3.for循环 4.java 增强for循环 java循环结构 顺序结构的程序语句只能 被执行一次.如果你要同样的操作执行多次,就需要使用循环结构. java中有三种主要的循环结构: while 循环 do...while 循环 for 循环 在java5中引入一种主要用于数组的增强型for循环. 1.while循环 while是最基本的循环,它的结构为: package com.example.lesson1; //whil

随机推荐