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系统,不同的模块需要用不同的邮箱发送信息给收件人.比如:员工离职的时候用离职的邮箱发送离职邮件通知,员工入职的时候用入职的邮箱发送入职邮件通知.发邮件是一件耗时的任务,如果 ...
随机推荐
- php百度地图计算两地现实距离
请自行到百度地图官网申请您的ak <!--前端获取手机经纬度的代码--> <!--<!DOCTYPE html>--> <!--<html lang=& ...
- Oracle中with as用法
with as 相当于虚拟视图. 例子:需求描述 按照x列分组后统计y列的总值,最终目标是选出比y列总值的三分之一大的那些分组统计信息 使用子查询方式实现最容易想到的方法 SELECT x, SU ...
- 2019-9-2-C#判断文件是否被混淆
title author date CreateTime categories C#判断文件是否被混淆 lindexi 2019-09-02 12:57:37 +0800 2018-2-13 17:2 ...
- Leetcode46. Permutations全排列
给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1 ...
- for循环取出每个i的值
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...
- python 中if __name__=="__main__"
if __name__=="__main__":表示当执行运行文件为当前代码所在文件时,则会执行if__name__=="__main__":后的语句. 如果这 ...
- golang时间与日期相关函数
- Leetcode917.Reverse Only Letters仅仅反转字母
给定一个字符串 S,返回 "反转后的" 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转. 示例 1: 输入:"ab-cd" 输出:" ...
- 【JZOJ4755】【NOIP2016提高A组模拟9.4】快速荷叶叶变换
题目描述 输入 一行,包含两个整数N,M. 输出 1个整数,FHT(N,M) mod 1000000007的值. 样例输入 3 4 样例输出 1 数据范围 对于 40% 的数据,1 ≤ N,M ≤ 1 ...
- 【JZOJ4742】【NOIP2016提高A组模拟9.2】单峰
题目描述 输入 输出 样例输入 2 样例输出 2 数据范围 解法 答案为2^(n-1),快速幂即可. 证明:显然峰值必定为n,那么对于其他n-1个数,要么放在峰值的左边,要么放在峰值的右边,所以方案数 ...