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

用到的用户表:

 CREATE TABLE `recruit_users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`phone` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT '手机号码',
`email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`status` tinyint(4) DEFAULT '' COMMENT '帐户状态(0失效 1正常)',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`lastlogintime` timestamp NULL DEFAULT NULL COMMENT '最后登陆时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

1.在 Laravel 中使用 Redis 你需用通过 Composer 来安装 predis/predis 包文件,不然会报错Class 'Predis\Client' not found

composer require predis/predis ^1.1

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

优先配置.env 文件如下:

 QUEUE_DRIVER=redis

 REDIS_HOST=127.0.0.1
REDIS_PASSWORD=******
REDIS_PORT=

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

 return [
'default' => env('QUEUE_DRIVER', 'redis'),//修改队列驱动,使用redis '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' => env('SQS_KEY', 'your-public-key'),
'secret' => env('SQS_SECRET', 'your-secret-key'),
'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
'queue' => env('SQS_QUEUE', 'your-queue-name'),
'region' => env('SQS_REGION', 'us-east-1'),
], 'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => 'default',
'retry_after' => 90,
'block_for' => null,
],
], 'failed' => [
'database' => env('DB_CONNECTION', 'mysql'),//队列执行失败 存放的数据库
'table' => 'failed_jobs',//队列执行失败 存放的表
],
];

Redis 在应用中的配置文件存储在 config/database.php,在这个文件中,你可以看到一个包含了 Redis 服务信息的 redis 数组:

 'redis' => [
'client' => 'predis',
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,//选择使用的redis库
],
],

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

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

 <?php

 namespace App\Jobs;

 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;
use App\Models\RecruitUser as User; 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;
} /**
* Execute the job.
*
* @return void
*/
public function handle()
{
$user = $this->user;
Mail::raw('这里填写邮件的内容', function ($message) {
// 收件人的邮箱地址
$message->to($this->user->email);
// 邮件主题
$message->subject('队列发送邮件');
});
}
}

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

 <?php

 namespace App\Http\Controllers\Home;

 use App\Jobs\SendEmail;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\RecruitUser as User; class MessageController extends Controller
{
public function index()
{
$user = User::find(2);
$res = $this->dispatch(new SendEmail($user));
dd($res);
}
}

5. 启动、监听队列

5.1 php artisan queue:work —queue=sendEmail
指定启动sendEmail队列

5.2 php artisan queue:restart
重启队列

5.3 php artisan queue:work —timeout=60
队列进程 queue:work 可以设定超时 —timeout 项。该 —timeout 控制队列进程执行每个任务的最长时间,如果超时,该进程将被关闭。
注:参数项 —timeout 的值应该始终小于配置项 retry_after 的值,这是为了确保队列进程总在任务重试以前关闭。如果 —timeout 比retry_after 大,那么你的任务可能被执行两次。

5.4 php artisan queue:work —sleep=3
休眠时间,每执行一个任务后休眠3秒

监听三种情况:

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

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

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

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

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

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

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

查看redis是否有队列数据

命令行监听界面:

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

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

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

laravel5.6 基于redis,使用消息队列(邮件推送)的更多相关文章

  1. php+redis 实现消息队列的推送【demo】。

    用redis做队列,为了缓解瞬间请求服务器的压力.实际开发当中可通过定时任务去做.当然缺点是不够实时. 1.添加一个php文件,PushQueue.php <?php $redis=new re ...

  2. 基于Redis的消息队列php-resque

    转载:http://netstu.5iunix.net/archives/201305-835/ 最近的做一个短信群发的项目,需要用到消息队列.因此开始了我对消息队列选型的漫长路. 为什么选型会纠结呢 ...

  3. [视频教程] 基于redis的消息队列实现与思考

    使用redis的list列表来实现消息队列功能,相信大家都听过消息队列,但是在业务中可能并没有真正去使用它.在公司项目中正好有个场景使用到了消息队列,因此就来说一下流程.在web界面上有个功能是群发邮 ...

  4. 基于Redis的消息队列使用:spring boot2.0整合redis

    一 . 引入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="ht ...

  5. 程序员过关斩将--redis做消息队列,香吗?

    Redis消息队列 在程序员这个圈子打拼了太多年,见过太多的程序员使用redis,其中一部分喜欢把redis做缓存(cache)使用,其中最典型的当属存储用户session,除此之外,把redis作为 ...

  6. Redis 做消息队列

    一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式.利用redis这两种场景的消息队列都能够实现.定义: 生产者消费者模式:生产者生产消息放到队列里,多个消费者同时监听队列, ...

  7. Redis作为消息队列服务场景应用案例

    NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例   一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更 ...

  8. redis resque消息队列

    Resque 目前正在学习使用resque .resque-scheduler来发布异步任务和定时任务,为了方便以后查阅,所以记录一下. resque和resque-scheduler其优点在于功能比 ...

  9. HQueue:基于HBase的消息队列

    HQueue:基于HBase的消息队列   凌柏   ​1. HQueue简介 HQueue是一淘搜索网页抓取离线系统团队基于HBase开发的一套分布式.持久化消息队列.它利用HTable存储消息数据 ...

  10. 【springboot】【redis】springboot+redis实现发布订阅功能,实现redis的消息队列的功能

    springboot+redis实现发布订阅功能,实现redis的消息队列的功能 参考:https://www.cnblogs.com/cx987514451/p/9529611.html 思考一个问 ...

随机推荐

  1. Linux进程管理工具vmstat,iostat,pmap

    一查看内存的工具——vmstat (一)vmstat的介绍 vmstat vmstat是Virtual Memory Statistics(虚拟内存统计)的缩写 利用vmstat命令可以对操作系统的报 ...

  2. php str_pad()函数 语法

    php str_pad()函数 语法 str_pad()函数怎么用? php str_pad()函数用于把字符串填充到指定长度,语法是str_pad(string,length,pad_string, ...

  3. webpack使用问题记录

    1.版本问题 webpack的安装并不是越新越好.当使用最新版本时不使用配置文件,直接编译不生成文件甚至报错:使用3.12版本时编译文件可以成功但是不生成新文件:使用 3.5.3 版本时成功且生成新文 ...

  4. (转)使用InfluxDB+cAdvisor+Grafana配置Docker监控

    文档来源 文档来源:How to setup Docker Monitoring 由garyond翻译.校正及整理 Docker监控简介 我们提供的Docker主机和容器越来越多,对Docker服务器 ...

  5. Docker容器数据卷volumes-from

    定义4个终端: 终端host终端container dc01终端container dc02终端container dc03各个容器之间的关系: 1.启动一个父容器dc01启动一个父容器dc01,并在 ...

  6. linux 命令参数列表过长以及find用法

    1.在一个目录下删除大批量的文件时,当使用 rm -rf 或者rm *会提示参数列表过长   通过修改命令为 :find . -name "*" | xargs rm -rf '* ...

  7. 【GDAL】聊聊GDAL的数据模型

    GDAL是个非常优秀的GIS数据操作库,最近在和实习生介绍GDAL的简单使用,顺手写下记录 本篇记录栅格数据,代码环境为C# 在GDAL中,栅格数据大致是以一个Dataset对应一个栅格数据文件(.T ...

  8. 配送单MYSQL ,一点都不机智

    这是配送单制作,后面修改了下表 . 写的太乱. 不过也不想去修改了. 放在这里了.反正还能用. 不然就坑爹了. 以后写好一点. 这都是些神马, 太难受了. /* 配送单制作,缺少商品规格,以及库存查询 ...

  9. python让人头大的装饰器...decorator带参不带参用法和原理.,..

    0. 概念什么叫装饰器,其实也可以叫做包装器.即对于一个既有的函数func(args),在调用它之前和之后,我们希望都做一些事情,把这个函数包装起来. python中的装饰器分为两类:函数装饰器和类装 ...

  10. Android深度探索-卷1第四章心得体会

    这一章的和三章的git用法有联系,so,吧上一章的git基本用法搞好了再来,具体的方法就是看书上网查,这里就不做详细步骤介绍了.这章就有点意思了,是源码的下载和编译,有能看的,能自己鼓捣的,本章介绍的 ...