laravel 定时任务通过队列发送邮件
https://www.jianshu.com/p/f6b94596098e
关于laravel发送邮件,请先参考我的另一片文章:laravel sendcloud发送邮件,再继续往下看。
1.用database队列驱动,生成创建这些表的迁移
php artisan queue:table
php artisan migrate
用redis 队列驱动需要在配置文件 config/database.php 中配置 Redis 数据库连接
2.生成任务类
php artisan make:job SendToStarterMail
生成之后,在handle方法中处理发送邮件
<?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\Log; class SendToStarterMail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $email;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($email)
{
$this->email = $email;
} /**
* Execute the job.
*
* @return void
*/
public function handle()
{
Mail::to($useremail)->send(new StarterMail($user))//StarterMail为第3步创建的邮件类
->cc($moreUsers)
->bcc($evenMoreUsers); }
}
3.创定时任务指令
php artisan make:command SendStarterEmail
就会在app/Console/Commands下生成一个SendStarterEmail.php文件,进入这个文件,自定义指令名:
protected $signature = 'starter:email';
添加描述
protected $description = '创业者邀约邮件';
handle方法里写逻辑
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//业务逻辑
$job = (new SendToStarterMail($email))->onConnection('database')->onQueue('emails');//SendToStarterMail为第二步生成的任务类
dispatch($job);//分发任务到队列
}
4.设置定时时间
在app/Console/Kernel.php的schedule方法里添加:
protected function schedule(Schedule $schedule)
{
$schedule->command('starter:email')->dailyAt('12:00');
}
本地测试时,为方便测试,将执行时间改为everyMinute()运行,正式环境上线时再改回来!
5.运行队列监听服务
php artisan queue:work database --queue=emails #database为对接驱动,emails为队列名称,可自定义
正式环境请配置在supervisor里,请参考我的另外一篇文章:supervisor 从安装到使用
6.正式环境将以下添加如crontab中
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
测试环境,可运行以下代替:
php artisan schedule:run
作者:童蒙_
链接:https://www.jianshu.com/p/f6b94596098e
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
laravel 定时任务通过队列发送邮件的更多相关文章
- Laravel中利用队列发送邮件的方法示例
https://www.jb51.net/article/121647.htm 本文主要给大家介绍了关于Laravel中队列发送邮件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的 ...
- laravel 队列发送邮件
批量处理任务的场景在我们开发中是经常使用的,比如邮件群发,消息通知,短信,秒杀等等,我们需要将这个耗时的操作放在队列中来处理,从而大幅度缩短Web请求和相应的时间.下面讲解下Laravel中队列的使用 ...
- laravel服务l队列资料整理
Laravel 队列系列 —— 基于 Redis 实现任务队列的基本配置和使用 1.概述 在Web开发中,我们经常会遇到需要批量处理任务的场景,比如群发邮件.秒杀资格获取等,我们将这些耗时或者高并发的 ...
- Laravel中的队列处理
Laravel中的队列处理 队列介绍 为什么要有消息队?这里先对其进行一个简单的介绍,方便还不了解的同学理解.在面向对象里,有一个很简单的概念--消息传递,而消息队列就可以在它上面扩展一下,把它说的更 ...
- laravel的消息队列剖析
laravel的消息队列剖析 这篇来自于看到朋友转的58沈剑的一篇文章:1分钟实现"延迟消息"功能 在实际工作中也不止遇见过一次这个问题,我在想着以前是怎么处理的呢?我记得当初在上 ...
- [原创]Laravel 基于redis队列的解析
目录 参考链接 本文环境 为什么使用队列 Laravel 中的队列 分发任务 任务队列 Worker Last-Modified: 2019年5月10日11:44:18 参考链接 使用 Laravel ...
- 记一次Laravel 定时任务schedul:run未执行的处理
关于Laravel的任务调度(定时任务)的配置在此不做赘述,跟着官方文档一步一步的操作是不会导致定时任务不能正常工作的. 为保证能及时捕获定时任务执行出现异常的原因,只需在配置系统crontab时指定 ...
- C#通过rabbitmq实现定时任务(延时队列)
本文主要讲解如何通过RabbitMQ实现定时任务(延时队列) 环境准备 需要在MQ中进行安装插件 地址链接 插件介绍地址:https://www.rabbitmq.com/blog/2015/04/1 ...
- laravel 使用不同账号发送邮件的问题
业务背景: 公司自己做的oa系统,不同的模块需要用不同的邮箱发送信息给收件人.比如:员工离职的时候用离职的邮箱发送离职邮件通知,员工入职的时候用入职的邮箱发送入职邮件通知.发邮件是一件耗时的任务,如果 ...
随机推荐
- day 56
目录 聚合查询 分组查询 F与Q查询 ORM字段及参数 13个字段操作总结 自定义char字段 ORM中事物的操作 数据库三大范式 聚合查询 aggregate()是QuerySet()的一个终止子句 ...
- Robbin负载均衡
Robbin是在Spring Cloud中的一个组件,是由Netfix发布的负载均衡器,有助于控制HTTP和TCP客户端的行为.它给我们提供了默认的轮询.随机等负载均衡算法.同时也可以由我们定义自己的 ...
- 洛谷P1456Monkey King
洛谷P1456 Monkey King 题目描述 Once in a forest, there lived N aggressive monkeys. At the beginning, they ...
- Ubuntu上更换163源 - Mars Loo的博客
转载*请注明原始出处:http://blog.csdn.net/a464057216/article/details/50865895 先备份源/etc/apt/sources.list为source ...
- mybatis的第一个程序
程序结构图: 表结构: 创表sql: CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varch ...
- 三分钟学会在ASP.NET Core MVC 中使用Cookie
一.Cookie是什么? 我的朋友问我cookie是什么,用来干什么的,可是我居然无法清楚明白简短地向其阐述cookie,这不禁让我陷入了沉思:为什么我无法解释清楚,我对学习的方法产生了怀疑!所以我们 ...
- HTML之meta标签缓存控制
<meta http-equiv="pragram" content="no-cache"> 禁止浏览器从本地缓存中调阅页面. 网页不保存在缓存中, ...
- golang时间与日期相关函数
- 【JZOJ3216】【SDOI2013】淘金
╰( ̄▽ ̄)╭ 小 Z在玩一个 叫做<淘金者>的游戏.游戏的世界是一个 二维坐标 .X轴.Y轴坐标范围均为1..N.初始的时候,所有的整数坐标点上均有一块金子,共 N*N 块. 一阵风吹过 ...
- JavaScript 生成32位UUID
function uuid(){ var len=32; //32长度 var radix=16; //16进制 var chars='0123456789ABCDEFGHIJKLMNOPQRSTUV ...