laravel 定时任务通过队列发送邮件[通俗易懂]

laravel 定时任务通过队列发送邮件

大家好,又见面了,我是全栈君。

 

关于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://javaforall.net/111733.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MyBatis+Spring+SpringMVC框架面试题整理(一)

    MyBatis+Spring+SpringMVC框架面试题整理(一)目录■SpringMVC的工作原理■谈谈你对SpringMVC的理解■SpringMVC常用注解都有哪些?■Spring的常用注解■如何开启注解处理器和适配器?■​​​​​​​如何解决get和post乱码问题?■​​​​​​​谈谈你对Spring的理解■​​​​​​​Spring中的设计模式(解释)■​​​​​​​简…

    2022年5月2日
    40
  • 双边滤波算法原理

    双边滤波算法原理一、引言        双边滤波在图像处理领域中有着广泛的应用,比如去噪、去马赛克、光流估计等等,最近,比较流行的Non-Local算法也可以看成是双边滤波的一种扩展。自从Tomasietal等人提出该算法那一天起,如何快速的实现他,一直是人们讨论和研究的焦点之一,在2011年及2012年KunalN.Chaudhury等人发表的相关论文中,提出了基于三角函数关系的值域核算法,能

    2022年6月1日
    31
  • R语言程序设计中的for循环实战

    R语言程序设计中的for循环实战R 语言程序设计中的 for 循环实战

    2025年6月13日
    0
  • uni-app打包成安卓app步骤详解[通俗易懂]

    前置:开发环境AndroidStudio下载地址:AndroidStudio官网ORAndroidStudio中文社区HBuilderXApp离线SDK下载:最新android平台SDK下载3.1.10版本起需要申请Appkey,具体请点击链接正文:通过uni-app实现一套代码在微信小程序和安卓端app同时适配1.创建文件创建Demo文件,采用uni-app模板2.创建应用在https://dev.dcloud.net.cn/app页面创建相同名称的应用,并且获取

    2022年4月13日
    775
  • java8 groupingby_Java8stream中利用groupingBy进行多字段分组求和

    java8 groupingby_Java8stream中利用groupingBy进行多字段分组求和对集合按照单个属性分组、分组计数、排序Listitems=Arrays.asList(“apple”,”apple”,”banana”,”apple”,”orange”,”banana”,”papaya”);//分组Map>result1=items.stream().collect(Collectors.groupingBy(Function.identity()));…

    2022年8月20日
    11
  • 山西计算机中考操作题,2017山西中考物理实验操作试题发布

    山西计算机中考操作题,2017山西中考物理实验操作试题发布一、2017年山西省中考物理命题依据《义务教育物理课程标准(2011年版)》是2017年山西中考物理试题的唯一命题依据.二、2017年山西省中考物理命题原则1.总原则(1)内容:强化学科核心内容,弱化枝端末节内容.(2)结构:强化良好结构的知识,弱化零散的知识.(3)测查能力层次:强化概念、原理的理解与应用,及分析、综合等思维能力;弱化单纯的事实和内容记忆.(4)测查角度:强化学生理解了哪些,弱…

    2022年5月18日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号