我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Laravel的队列机制怎么用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Laravel的队列机制怎么用

这篇文章主要介绍了Laravel的队列机制怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

为什么 ?

首先,我们要知道为什么要使用队列,不使用队列会怎么样!优缺点如何

我们可以举例 几个简单场景。

邮件发送

邮件发送一般会面临哪些问题 ??

  • 发送缓慢

  • 发送失败

  • 发送频率过高,被服务商拒绝 又或者 被进入垃圾箱

使用队列的好处在与哪里

  • 提高客户端响应

    当发送时,我们不要立即处理,而是丢给服务器,且队列进行管理和调度。 你可以自定义选择立即发送 或者 根据配置延迟发送

  • 提高容错能力

    在发送过程中,或许我们可能会遇到,目标被拒绝。例如大多数人 会遇到给 admin@qq.comn 发送报错 502 的场景。那这种场景,那么这种场景,我们可以理解其为是一个事件,在邮件发送的过程中,我们可以 引发构建出如下几种事件

    通过此邮件发送,可能会导致多个耗时任务的产生,那我们其实也可以构建出多个 队列服务 出来。每个队列管理 自己的事情,很好的 解耦 他们

    通过 Laravel 队列 可以很好的进行设置 立即发送延迟发送重试发送

    • 发送失败

    • 邮件记录入库

    • 代码异常

    • 邮件发送成功回调

    • 发送失败重试

  • 发送频率可控

    使用过批量发送的邮件的 开发者 必然会遇到一个问题,那便是,如果我们直接进行批量发送,即同一时间 进行大量的邮件发送。那么邮件服务商很可能会把我们的邮件给拒绝 或者 邮件进入垃圾箱,被识别为 广告那么,这里便是用到了 延迟发送,我们可以根据当前队列服务中,已知的 正在等待 投递的邮件,合理的配置频率,或者 切换邮件配置,来达到,频率可控。

    如设置 一个配置一分钟之类发送10次,等等方案。同样,我们这里可以做到 配置、频率控制、发送控制 解耦

其他

当然 我们还有很多种情况都会用到

  • 服务器端下载 excel

  • 服务器端异步多任务处理 大数据

  • 错误消息处理

如何使用 Laravel 队列

这里只是列出,大概的使用方向,和如何更好的去使用。代码可能跑不起起来,主要是理解 逻辑我们这里 使用的是 Redis 作为驱动

驱动设置为 Redis

> .envQUEUE_CONNECTION=redis> 在 config/queue.php 中可以找到

快速创建队列 和 投递任务

# 创建 任务php artisan make:job ProcessPodcast

自动生成 app/Jobs/EmailJob.php

class EmailJob implements ShouldQueue{    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;    protected $data;        public function __construct(array $data)    {        $this->data = $data;    }        public function handle()    {        $service = new EmailService();        // ... 检查当前可用 Mailer        // 这里你自定义就好了,这个方法中你可以根据你自己的配置,获取到当前可用的配置        $mailer = $service->getMailer();        // ... 获取当前要发送的数据        $data = $this->data;                $service->send($mailer, $data);    }}

一些常用操作

这些操作都能从 文档中找到

调用 发送

# 延迟 2分钟 发送# 这里使用的是 Crontab 包 (不过 Laravel 自带)EmailJob::dispatch()->delay(now()->addMinutes(2));# 立即发送 (不会进入到队列中)EmailJob::dispatchNow();

这里的队列默认用的 是 defult 队列,我们可以修改为指定队列服务

public function __construct(array $data){    # 使用 emailQueue    $this->onQueue('emailQueue');    $this->data = $data;}

设置失败情况下重试次数

# 重试 5 次public $tries = 5;

设置超时时间

public function retryUntil(){    return now()->addMinutes(10);}

启动我们的队列

如果不配置 onQueue 的话,可以不带 ---queue 参数配置

php artisan queue:work --queue=emailQueue

结合 Events 来解耦

Laravel Event 也是通过 队列实现的

# 创建 Eventphp artisan make:event FailEventclass FailEvent{    use Dispatchable, InteractsWithSockets, SerializesModels;    protected $data;    protected $tag;        public function __construct(array $data, string $tag = 'system')    {        $this->data = $data;        $this->tag = $tag;    }}# 创建 listener php artisan make:listener FailListenerclass FailListener{        public function handle(FailEvent $event)    {        $this->{$event->tag}($event->data);    }        public function system(array $data)    {    }        public function email()    {        }}# app/Providers/EventServiceProvider.phpprotected $listen = [    FailEvent::class => [        FailListener::class,    ],]# 投递event(new FailEvent(['error' = '异常信息'], 'email'));

其他

其实,Laravel 大多数帮我实现了整个流程而已。可以尝试自己使用 redis 来实现一个可控队列。熟练是掌握 Redis 相关数据类型即可.这里简要列出 Redis 中,在以上模式中会用到的数据类型

  • List

    使用 它可以完成 出栈 入栈的 队列功能

  • Hash

    使用他 可以用来存储,序列化后的 Event 或者 Job  __construct 传入进去的数据,尽量不要将整个 类 序列化进去

    也可以实现存储,Mailer 数据

  • Sorted Set

    可以 设置时间为 Sorted Set 中的分数,通过分数排序,找到我们最近要执行的队列任务

当然,Redis 的用法还有很多,满足自己的需求即可。

世界上没有完美的解决方案,只有最适合你自己的方案,在工作中遇到问题,尽量要学会举一反三,合理的运用各种 工具,设计方案去实现。代码 只是最终一个缩影而已,最终的要学会理解,每个语言 每个框架,也只是一种方案的实现,融会贯通才无敌 ...

感谢你能够认真阅读完这篇文章,希望小编分享的“Laravel的队列机制怎么用”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Laravel的队列机制怎么用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Laravel的队列机制怎么用

这篇文章主要介绍了Laravel的队列机制怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。为什么 ?首先,我们要知道为什么要使用队列,不使用队列会怎么样!优缺点如何我们可
2023-06-22

laravel队列怎么使用

今天小编给大家分享一下laravel队列怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在laravel中,队列是一种
2023-06-29

laravel队列有什么作用

这篇文章主要介绍了laravel队列有什么作用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇laravel队列有什么作用文章都会有所收获,下面我们一起来看看吧。在laravel中,队列可以用于允许在表的前端进行
2023-07-02

laravel队列并发消费怎么配置

要在Laravel中配置并发消费队列,需要进行以下步骤:首先,确保你已经安装了 Laravel 的队列服务提供者(例如,Redis 或 Database 队列)。可以在 `.env` 文件中配置队列连接和驱动器。在 Laravel 的配置文
laravel队列并发消费怎么配置
2023-10-28

laravel源码分析队列Queue方法怎么用

本篇内容介绍了“laravel源码分析队列Queue方法怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!队列任务的创建先通过命令创建一个
2023-06-29

laravel队列执行失败怎么处理

laravel队列执行失败处理方法:1、重新执行失败的队列任务,获取有关失败任务的信息,运行 ` artisan queue:failed` 命令并选择重新执行失败的任务;2、解决常见问题,检查队列连接是否正常,队列是否超时,代码错误是否错
2023-07-10

laravel自带队列效率怎么提升

要提升Laravel队列的效率,可以考虑以下几个方面:1. 使用适当的队列驱动器:Laravel支持多种队列驱动器,如数据库、Redis、Beanstalkd等。选择适合你应用的队列驱动器可以提升队列的效率。2. 配置队列工作进程数量:在L
2023-09-06

laravel用队列能解决什么问题

这篇“laravel用队列能解决什么问题”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“laravel用队列能解决什么问题”文
2023-06-29

laravel队列并发消费的作用是什么

Laravel队列并发消费的作用是提高任务处理的效率和速度。通过并发消费,可以同时处理多个队列任务,而不是顺序地一个一个处理。这样可以节省时间,并且能够更快地处理大量的任务。并发消费还可以提高系统的负载均衡能力。当系统面临高并发请求时,通过
2023-09-06

laravel多线程执行队列怎么实现

在Laravel中,可以使用`illuminate/queue`组件来实现多线程执行队列的功能。首先,需要在项目中安装`illuminate/queue`组件,可以通过Composer进行安装:```composer require ill
2023-09-06

Laravel怎么实现队列和任务调度

本文小编为大家详细介绍“Laravel怎么实现队列和任务调度”,内容详细,步骤清晰,细节处理妥当,希望这篇“Laravel怎么实现队列和任务调度”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、 我们首先准备一下
2023-07-04

rabbitMQ怎么复制队列内消息

要复制RabbitMQ队列内的消息,可以使用RabbitMQ的镜像队列功能。镜像队列功能可以将一个队列中的消息复制到多个节点上,以提高消息的可靠性和可用性。要启用镜像队列功能,需要在创建队列时指定队列的镜像参数。可以通过RabbitMQ的
rabbitMQ怎么复制队列内消息
2024-02-29

java的redis队列怎么使用

Redis队列是一种适用于Java应用程序的高性能分布式队列。它可通过Jedis客户端库或SpringDataRedis模板使用。队列操作包括入队、出队、修剪和阻塞弹出。Redis队列优势在于高性能、可靠性和可扩展性,但存在数据丢失风险和消息大小限制。理解这些优势和局限性,开发者可以利用Redis队列提升应用程序性能和灵活性。
java的redis队列怎么使用
2024-04-02

Java线程池队列中的延迟队列DelayQueue怎么使用

今天小编给大家分享一下Java线程池队列中的延迟队列DelayQueue怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧
2023-07-04

redis队列功能怎么用

redis提供队列功能,用于实现消息队列。使用redis队列功能分三步完成:创建队列(lpush)、读取队列(blpop/brpop)、删除队列(del)。redis队列具有速度快、可靠性高等优势,但数据持久性有限、不支持优先级队列。其应用
redis队列功能怎么用
2024-05-21

Laravel中用Observer事件致Redis队列异常问题怎么解决

本篇内容主要讲解“Laravel中用Observer事件致Redis队列异常问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Laravel中用Observer事件致Redis队列异常问
2023-06-21

C++中队列queue怎么用

这篇文章主要讲解了“C++中队列queue怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中队列queue怎么用”吧!一、定义queue是一种容器转换器模板,调用#include<
2023-06-29

C语言队列怎么用

这篇文章主要介绍C语言队列怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.队列的原理队列原理其实就像一个管道,如果我们不断往管道里面塞乒乓球,每个乒乓球在管道里就会排列一条队形。先进去的乒乓球就会先出来,这个
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录