Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >laravel 定时任务通过队列发送邮件[通俗易懂]

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

作者头像
全栈程序员站长
发布于 2022-07-12 13:46:05
发布于 2022-07-12 13:46:05
1.4K00
代码可运行
举报
运行总次数:0
代码可运行

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

关于laravel发送邮件,请先参考我的另一片文章:laravel sendcloud发送邮件,再继续往下看。

1.用database队列驱动,生成创建这些表的迁移

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
php artisan queue:table
php artisan migrate

redis 队列驱动需要在配置文件 config/database.php 中配置 Redis 数据库连接

2.生成任务类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
php artisan make:job SendToStarterMail

生成之后,在handle方法中处理发送邮件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?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.创定时任务指令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
php artisan make:command SendStarterEmail

就会在app/Console/Commands下生成一个SendStarterEmail.php文件,进入这个文件,自定义指令名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected $signature = 'starter:email';

添加描述

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected $description = '创业者邀约邮件';

handle方法里写逻辑

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 /**
     * 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方法里添加:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected function schedule(Schedule $schedule)
{
     $schedule->command('starter:email')->dailyAt('12:00');
}

本地测试时,为方便测试,将执行时间改为everyMinute()运行,正式环境上线时再改回来!

5.运行队列监听服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
php artisan queue:work database --queue=emails #database为对接驱动,emails为队列名称,可自定义

正式环境请配置在supervisor里,请参考我的另外一篇文章:supervisor 从安装到使用

6.正式环境将以下添加如crontab中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1

测试环境,可运行以下代替:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
php artisan schedule:run

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/111733.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年2月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Laravel异步队列全攻略
最近项目需求,研究了laravel的异步队列。官方文档虽然很是详细,但也有些晦涩难懂,在此记录下步骤,供大家参考。
双面人
2021/08/05
1.3K0
laravel 基于redis队列
https://www.owenzhang.com/wechat_reward.png
OwenZhang
2023/05/06
3140
laravel 基于redis队列
Laravel5.5之事件监听、任务调度、队列
你写好任务类后,就能通过 dispatch 辅助函数来分发它了。唯一需要传递给 dispatch 的参数是这个任务类的实例: 利用模型工厂生成30个用户:
唐成勇
2019/05/26
1.5K0
记录:简单使用Laravel 队列 queue 教程
Laravel 队列为不同的后台队列服务提供统一的 API,例如 Beanstalk,Amazon SQS,Redis,甚至其他基于关系型数据库的队列。队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短 Web 请求和响应的时间。
Alone88
2019/10/22
1.6K0
深入理解Laravel定时任务调度机制
一个复杂的web系统后台当中,一定会有很多定时脚本或者任务要跑。例如爬虫系统需要定期去爬取一些网站数据,自动还贷系统需要每个月定时对用户账户扣款结算,会员系统需要定期检测用户剩余会员天数以便及时通知续费等等。Linux系统中内置的crontab一般被广泛地用于跑定时任务。其任务指令格式如下:
horstxu
2019/01/22
10.8K1
深入理解Laravel定时任务调度机制
Laravel队列简单使用
队列的配置信息存放在config/queue.php 在.env中修改配置驱动 QUEUE_DRIVER=redis 使用redis驱动 REDIS_CLIENT=predis 使用predis
切图仔
2022/09/08
8720
Laravel队列简单使用
laravel-redis消息队列
基本的流程就是由生产者(业务代码)将数据推送到队列中(此处使用的是Redis),然后由消费者(处理程序)从队列中取出数据进行加工处理。
用户10002156
2024/01/29
2780
laravel-redis消息队列
Laravel 事件处理(event)+ 队列使用(queue)
该脚本定义了一下优化参数,执行redis中名字为FMock的队列,不输出任何信息,3秒一次,失败后3秒重新执行,最多执行3次。
躺平程序员老修
2023/09/05
6050
Laravel队列使用案例
1、配置数据库和Redis //编辑config/database.php 'mysql' => [ 'driver' => 'mysql', 'host' => 'localhost', 'port' => 3306, 'database' => 'demo_laravel', 'username' => 'demo', 'password' => '1234
苦咖啡
2018/04/28
1.8K0
Laravel 队列
由于队列任务是长期存在的进程,因此如果不重新启动,他们不会注意到代码的更改。因此,使用队列任务部署应用程序的最简单方法是在部署过程中重新启动任务。您可以通过发出 queue:restart 命令优雅地重新启动所有进程:
崔哥
2023/02/27
1.2K0
Laravel中利用队列发送邮件的方法示例
前言 本文主要给大家介绍了关于Laravel中队列发送邮件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 批量处理任务的场景在我们开发中是经常使用的,比如邮件群发,消息通知,短信,秒杀等等,我们需要将这个耗时的操作放在队列中来处理,从而大幅度缩短Web请求和相应的时间。下面讲解下Laravel中队列的使用
用户2323866
2021/07/01
1.5K0
让Laravel/Lumen队列消费Non-Laravel queue job
一句话概括需求就是:Allow Laravel to process non-laravel queue job.
andychai
2019/03/08
2.7K0
让Laravel/Lumen队列消费Non-Laravel queue job
PHP-web框架Laravel-队列(二)
在 Laravel 中,定义作业是通过实现 Illuminate\Contracts\Queue\Job 接口来完成的。这个接口定义了一个 fire 方法,用于处理作业的逻辑。下面是一个示例::
堕落飞鸟
2023/04/30
6430
3分钟短文:Laravel是怎么发出一封电子邮件的?
上一章我们为发电子邮件准备了贴心的表单,完善的数据验证,那么本篇我们讲解如何在laravel内发送一封电子邮件。
程序员小助手
2020/10/15
2K0
3分钟短文:Laravel是怎么发出一封电子邮件的?
基于 Redis 消息队列实现 Laravel 事件监听及底层源码探究
在 Laravel 中,除了使用 dispatch 辅助函数通过 Illuminate\Bus\Dispatcher 显式推送队列任务外,还可以通过事件监听的方式隐式进行队列任务推送,在这个场景下,事件监听器实际上扮演了「任务类」的角色。
学院君
2021/01/08
3.6K0
laravel5.6 发送邮件附带邮件时,Unable to open file for reading,报错文件路径问题
https://stackoverflow.com/questions/48568739/unable-to-open-file-for-reading-swift-ioexception-in-laravel-mailable
全栈程序员站长
2021/10/25
8210
Laravel7中Redis队列的使用
首先我们需要在配置文件中配置默认队列驱动为Redis,队列配置文件是config/queue.php:
Lansonli
2021/10/09
1.1K0
php laravel5.5使用rabbitmq消息队列
博主看了一些消息队列,大多数消息队列都没有对 php 比较友好的 SDK,这边 rabbitmq 算是一个不错的消息队列,给大家介绍一下在 Laravel 中如何使用。
憧憬博客
2020/07/21
1.8K0
laravel使用redis配置队列
有些任务并不需要及时运行,就可以将其写入队列,从而不影响主业务逻辑的进程。如:用户发帖成功后推送消息给其关注的用户。如果一个用户是大v,有几百万的粉丝,肯定不能将发贴与推送通知的逻辑捆绑在一起,不然分分钟卡死。
章鱼喵
2019/04/01
1.9K0
laravel使用redis配置队列
相关推荐
Laravel异步队列全攻略
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验