返回顶部
首页 > 资讯 > 精选 >Laravel的队列机制怎么用
  • 251
分享到

Laravel的队列机制怎么用

2023-06-22 03:06:53 251人浏览 八月长安
摘要

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

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

为什么 ?

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

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

邮件发送

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

  • 发送缓慢

  • 发送失败

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

使用队列的好处在与哪里

  • 提高客户端响应

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

  • 提高容错能力

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

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

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

    • 发送失败

    • 邮件记录入库

    • 代码异常

    • 邮件发送成功回调

    • 发送失败重试

  • 发送频率可控

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

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

其他

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

如何使用 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的队列机制怎么用”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: Laravel的队列机制怎么用

本文链接: https://lsjlt.com/news/302327.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Laravel的队列机制怎么用
    这篇文章主要介绍了Laravel的队列机制怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。为什么 首先,我们要知道为什么要使用队列,不使用队列会怎么样!优缺点如何我们可以...
    99+
    2023-06-22
  • laravel队列怎么使用
    今天小编给大家分享一下laravel队列怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在laravel中,队列是一种...
    99+
    2023-06-29
  • laravel队列有什么作用
    这篇文章主要介绍了laravel队列有什么作用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇laravel队列有什么作用文章都会有所收获,下面我们一起来看看吧。在laravel中,队列可以用于允许在表的前端进行...
    99+
    2023-07-02
  • Laravel队列如何使用
    这篇文章主要讲解了“Laravel队列如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Laravel队列如何使用”吧!什么情况使用队列?耗时的,比如上传一个文件后进行一些格式的转化等。...
    99+
    2023-06-29
  • laravel如何使用redis队列
    这篇文章将为大家详细讲解有关laravel如何使用redis队列,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、队列配置文件是config/queue.php(这里我默认配置即可):2、 创建迁移表(f...
    99+
    2023-06-14
  • laravel源码分析队列Queue方法怎么用
    本篇内容介绍了“laravel源码分析队列Queue方法怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!队列任务的创建先通过命令创建一个...
    99+
    2023-06-29
  • laravel自带队列效率怎么提升
    要提升Laravel队列的效率,可以考虑以下几个方面:1. 使用适当的队列驱动器:Laravel支持多种队列驱动器,如数据库、Red...
    99+
    2023-09-06
    laravel
  • laravel队列执行失败怎么处理
    laravel队列执行失败处理方法:1、重新执行失败的队列任务,获取有关失败任务的信息,运行 ` artisan queue:failed` 命令并选择重新执行失败的任务;2、解决常见问题,检查队列连接是否正常,队列是否超时,代码错误是否错...
    99+
    2023-07-10
  • laravel队列并发消费怎么配置
    要在Laravel中配置并发消费队列,需要进行以下步骤: 首先,确保你已经安装了 Laravel 的队列服务提供者(例如,Red...
    99+
    2023-10-28
    laravel
  • laravel用队列能解决什么问题
    这篇“laravel用队列能解决什么问题”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“laravel用队列能解决什么问题”文...
    99+
    2023-06-29
  • laravel队列并发消费的作用是什么
    Laravel队列并发消费的作用是提高任务处理的效率和速度。通过并发消费,可以同时处理多个队列任务,而不是顺序地一个一个处理。这样可...
    99+
    2023-09-06
    laravel
  • Laravel使用Queue队列的技巧汇总
    Laravel 队列为不同的后台队列服务提供统一的 API,例如 Beanstalk,Amazon SQS,Redis,甚至其他基于关系型数据库的队列。队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短 Web 请求和相应的时间...
    99+
    2023-09-02
    laravel php 开发语言
  • laravel多线程执行队列怎么实现
    在Laravel中,可以使用`illuminate/queue`组件来实现多线程执行队列的功能。首先,需要在项目中安装`illumi...
    99+
    2023-09-06
    laravel
  • Laravel怎么实现队列和任务调度
    本文小编为大家详细介绍“Laravel怎么实现队列和任务调度”,内容详细,步骤清晰,细节处理妥当,希望这篇“Laravel怎么实现队列和任务调度”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、 我们首先准备一下...
    99+
    2023-07-04
  • laravel使用redis队列实例讲解
    1、队列配置文件是config/queue.php(这里我默认配置即可): 2、 创建迁移表(failed-table 、jobs、migrations) php artis...
    99+
    2024-04-02
  • Laravel实现队列的示例代码
    目录一:队列配置1:队列相关配置2:不同队列依赖二:创建队列任务三:任务分发1:默认分发2:延时分发3:指定队列分发4:指定驱动分发5:指定驱动和队列分发四:任务处理五:失败任务处理...
    99+
    2023-02-10
    Laravel实现队列 Laravel 队列
  • rabbitMQ怎么复制队列内消息
    要复制RabbitMQ队列内的消息,可以使用RabbitMQ的镜像队列功能。镜像队列功能可以将一个队列中的消息复制到多个节点上,以提...
    99+
    2024-02-29
    rabbitmq
  • Java线程池队列中的延迟队列DelayQueue怎么使用
    今天小编给大家分享一下Java线程池队列中的延迟队列DelayQueue怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧...
    99+
    2023-07-04
  • Laravel中用Observer事件致Redis队列异常问题怎么解决
    本篇内容主要讲解“Laravel中用Observer事件致Redis队列异常问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Laravel中用Observer事件致Redis队列异常问...
    99+
    2023-06-21
  • RabbitMQ死信机制实现延迟队列的实战
    目录延迟队列应用场景TimeToLive(TTL) DeadLetterExchanges(DLX)延迟队列 延迟队列存储的对象肯定是对应的延时消息,所谓”延时消息”是指当...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作