iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Laravel队列如何使用
  • 258
分享到

Laravel队列如何使用

2023-06-29 08:06:58 258人浏览 泡泡鱼
摘要

这篇文章主要讲解了“Laravel队列如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Laravel队列如何使用”吧!什么情况使用队列?耗时的,比如上传一个文件后进行一些格式的转化等。

这篇文章主要讲解了“Laravel队列如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Laravel队列如何使用”吧!

什么情况使用队列?

耗时的,比如上传一个文件后进行一些格式的转化等。

需要保证送达率的,比如发送短信,因为要调用别人的 api,总会有几率失败,那么为了保证送达,重试就必不可少了。

记录使用过程:

一、配置队列存储

队列配置文件存放在 config/queue.PHP,默认为 sync 同步处理,这里可以选择 redis,database 等,使用方法如下。

数据库

创建数据表存储任务,执行完 artisan 命令后运行数据迁移

php artisan queue:tablephp artisan migrate

Redis

为了使用 redis 队列驱动,你需要在你的配置文件 config/database.php 中配置Redis的数据库连接。

如果你的 Redis 队列连接使用的是 Redis 集群,你的队列名称必须包含 key hash tag。这是为了确保所有的 Redis 键对于一个给定的队列都置于同一哈希中:

'redis' => ['driver' => 'redis','connection' => 'default','queue' => 'default','retry_after' => 90,],

二、创建任务类

队列的任务类在 app/Jobs/ 目录下

php artisan make:job SaveBusLine

修改文件如下:

namespace App\Jobs;use App\Http\Repository\BusRepository;use Illuminate\Bus\Queueable;use Illuminate\Queue\SerializesModels;use Illuminate\Queue\InteractsWithQueue;use Illuminate\Contracts\Queue\ShouldQueue;use Illuminate\Foundation\Bus\Dispatchable;class SaveBusLine implements ShouldQueue{use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;public $tries = 3;public $timeout = 60;private $datum;public function __construct($datum){$this->datum = $datum;}public function handle(){BusRepository::getInstent()->updateBusLine($this->datum);}}

在控制器或仓库中调用队列方法:

use App\Jobs\SaveBusLine;use Carbon\Carbon;SaveBusLine::dispatch($arrayData)->delay(Carbon::now()->addMinute(1));

三、启动队列任务

php artisan queue:work

四、Supervisor 配置

安装 Supervisor

Supervisor 是一个 linux 操作系统上的进程监控软件,它会在 queue:listen 或 queue:work 命令发生失败后自动重启它们。在 ubuntu 安装 Supervisor,可以用以下命令:

sudo apt-get install supervisor

{tip} 如果自己手动配置 Supervisor 听起来有点难以应付,可以考虑使用 Laravel Forge,它能给你的 Laravel 项目自动安装与配置 Supervisor。

配置 Supervisor

Supervisor 的配置文件一般是放在 /etc/supervisor/conf.d 目录下。在这个目录中你可以创建任意数量的配置文件来要求 Supervisor 怎样监控你的进程。例如我们创建一个 laravel-worker.conf 来启动与监控一个 queue:work 进程:

[program:laravel-worker]process_name=%(program_name)s_%(process_num)02dcommand=php ~/laravel/artisan queue:work redis --sleep=3 --tries=3autostart=trueautorestart=trueuser=lisgroupnumprocs=8redirect_stderr=truestdout_logfile=/home/lisgroup/logs/worker.log

这个例子里的 numprocs 命令会要求 Supervisor 运行并监控 8 个 queue:work 进程,并且在它们运行失败后重新启动。当然,你必须更改 command 命令的 queue:work redis ,以显示你所选择的队列驱动。还需要修改执行的用户 user=XXX

启动 Supervisor

当这个配置文件被创建后,你需要更新 Supervisor 的配置,并用以下命令来启动该进程:

sudo supervisorctl rereadsudo supervisorctl updatesudo supervisorctl start laravel-worker:*

五、处理失败的任务

有时候你队列中的任务会失败。不要担心,本来事情就不会一帆风顺。Laravel 内置了一个方便的方式来指定任务重试的最大次数。当任务超出这个重试次数后,它就会被插入到 failed_jobs 数据表里面。要创建 failed_jobs 表的迁移文件,你可以用 queue:failed-table 命令,接着使用 migrate Artisan 命令生成 failed_jobs 表:

php artisan queue:failed-tablephp artisan migrate

然后运行队列处理器,在调用 queue worker,命令时你应该通过 --tries 参数指定任务的最大重试次数。如果不指定,任务就会永久重试:

php artisan queue:work redis --tries=3

六、清除失败任务

你可以在任务类里直接定义 failed 方法,它能在任务失败时运行任务的清除逻辑。这个地方用来发一条警告给用户或者重置任务执行的操作等再好不过了。导致任务失败的异常信息会被传递到 failed 方法:

namespace App\Jobs;use Exception;use App\Podcast;use App\AudioProcessor;use Illuminate\Bus\Queueable;use Illuminate\Queue\SerializesModels;use Illuminate\Queue\InteractsWithQueue;use Illuminate\Contracts\Queue\ShouldQueue;class ProcessPodcast implements ShouldQueue{use InteractsWithQueue, Queueable, SerializesModels;protected $podcast;public function __construct(Podcast $podcast){$this->podcast = $podcast;}public function handle(AudioProcessor $processor){// 处理上传播客...}public function failed(Exception $exception){// 给用户发送失败通知,等等...}}

感谢各位的阅读,以上就是“Laravel队列如何使用”的内容了,经过本文的学习后,相信大家对Laravel队列如何使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Laravel队列如何使用

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

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

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Laravel队列如何使用
    这篇文章主要讲解了“Laravel队列如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Laravel队列如何使用”吧!什么情况使用队列?耗时的,比如上传一个文件后进行一些格式的转化等。...
    99+
    2023-06-29
  • laravel如何使用redis队列
    这篇文章将为大家详细讲解有关laravel如何使用redis队列,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、队列配置文件是config/queue.php(这里我默认配置即可):2、 创建迁移表(f...
    99+
    2023-06-14
  • laravel队列怎么使用
    今天小编给大家分享一下laravel队列怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在laravel中,队列是一种...
    99+
    2023-06-29
  • laravel如何实现本地队列
    Laravel提供了一个本地队列驱动程序,可以在不依赖于其他队列服务的情况下使用。要使用本地队列驱动程序,您需要执行以下步骤:1. ...
    99+
    2023-09-06
    laravel
  • laravel使用redis队列实例讲解
    1、队列配置文件是config/queue.php(这里我默认配置即可): 2、 创建迁移表(failed-table 、jobs、migrations) php artis...
    99+
    2024-04-02
  • C#队列如何使用
    本篇内容介绍了“C#队列如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!队列的特性很简答,就是先进先出,一般利用数组来实现。实现队列自...
    99+
    2023-06-29
  • Laravel使用Queue队列的技巧汇总
    Laravel 队列为不同的后台队列服务提供统一的 API,例如 Beanstalk,Amazon SQS,Redis,甚至其他基于关系型数据库的队列。队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短 Web 请求和相应的时间...
    99+
    2023-09-02
    laravel php 开发语言
  • laravel队列有什么作用
    这篇文章主要介绍了laravel队列有什么作用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇laravel队列有什么作用文章都会有所收获,下面我们一起来看看吧。在laravel中,队列可以用于允许在表的前端进行...
    99+
    2023-07-02
  • laravel队列消耗失败如何解决
    当Laravel队列消耗失败时,可以采取以下几种解决方法:1. 检查队列驱动配置:确保队列驱动配置正确,比如使用Redis或数据库作...
    99+
    2023-09-07
    laravel
  • 配置laravel-job队列
    laravel7-job教程 supervisor配置看的这位兄台的 感谢 来源地址:https://blog.csdn.net/sll9711/article/details/125330579...
    99+
    2023-09-15
    laravel php
  • RabbitMQ中死信队列和延迟队列如何使用
    这篇文章主要讲解了“RabbitMQ中死信队列和延迟队列如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“RabbitMQ中死信队列和延迟队列如何使用”吧!死信队列简介DLX,全称为De...
    99+
    2023-06-30
  • Laravel的队列机制怎么用
    这篇文章主要介绍了Laravel的队列机制怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。为什么 首先,我们要知道为什么要使用队列,不使用队列会怎么样!优缺点如何我们可以...
    99+
    2023-06-22
  • 如何在VBS中使用 vbscript队列
    如何在VBS中使用 vbscript队列?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。脚本文件:c.vbs,包含队列的添加元素(入队)、删除元素(出队)、遍历、统计元素个数...
    99+
    2023-06-08
  • Redis中如何使用消息队列
    这篇文章主要介绍了Redis中如何使用消息队列,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。说到消息队列中间件,我们都会想到RabbitMQ...
    99+
    2024-04-02
  • Laravel 队列入门教程 (RabbitMQ)
    假设你已经学过了基础 laravel任务和队列 和本系列的第一部分, 我们学习使用不同的队列连接(除了数据库), 如何为不同的任务来使用不同的队列, 以及如何将某些任务/队列优先于其他的任务/队列。使用 RabbitMQ即使laravel社...
    99+
    2023-02-09
    RabbitMQ Laravel 队列
  • 如何使用Laravel和Git进行团队协作?
    Laravel是一个流行的PHP框架,它提供了许多功能来帮助我们构建Web应用程序。而Git是一个流行的版本控制系统,可以帮助团队协作开发。在这篇文章中,我们将讨论如何使用Laravel和Git进行团队协作。 一、Git的基础知识 在使用G...
    99+
    2023-09-14
    django git laravel
  • laravel用队列能解决什么问题
    这篇“laravel用队列能解决什么问题”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“laravel用队列能解决什么问题”文...
    99+
    2023-06-29
  • python如何使用redis做队列服务
    这篇文章给大家介绍python如何使用redis做队列服务,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 系统中引入消息队列机制是对系统一个非常大的改善。例如一个web系统中,用户做...
    99+
    2024-04-02
  • jQuery中animate()如何使用队列功能
    这篇文章将为大家详细讲解有关jQuery中animate()如何使用队列功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。jQuery animate() - 使用队列功...
    99+
    2024-04-02
  • 如何使用redis实现消息队列
    使用redis实现消息队列的示例:redis的pubsub功能实现发布订阅模式,代码:import redisclass Task(object):def __init__(self):self.rcon = redis.StrictRed...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作