首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Laravel使用Queue队列技巧汇总

前言 Laravel 队列为不同后台队列服务提供统一 API,例如 Beanstalk,Amazon SQS,Redis,甚至其他基于关系型数据库队列。...其中还包含了一个 null 队列驱动用于那些放弃队列任务 为什么使用队列? 一般来说使用队列是为了: 异步 重试 也许你还有其他理由使用队列,但是这应该是最基本两个原因。...Laravel 内置了一个方便方式来指定任务重试最大次数。当任务超出这个重试次数后,它就会被插入到 failed_jobs 数据表里面。...线上的话需要用到supervisor配置 Supervisor 配置 安装 Supervisor Supervisor 是一个 Linux 操作系统进程监控软件,它会在 queue:listen...Forge,它能给你 Laravel 项目自动安装与配置 Supervisor。

2.3K10
您找到你想要的搜索结果了吗?
是的
没有找到

一个Laravel队列引发报警

queue:listen /usr/local/bin/php artisan queue:work 经过确认,它们是 Laravel 队列,虽然直觉告诉我问题与其有关联,但是进程本身并没有占用多少内存...,在不能立刻确诊原因情况下,我们用排除法把队列换到另外一台正常服务器看看会不会重现问题,过了一会,果然再次出现同样问题。...,内存 dentry 里缓存了最近访问过文件信息,如果频繁操作大量文件,那么 dentry 就会不断增加,于是问题就变为确认 Laravel 队列有没有类似问题。...前面提到过,Laravel 队列有一个 listen 进程,还有一个 work 进程,从名字我们就能判断出来,前者是主进程,后者是子进程,子进程是干活进程,可是当我直接 strace 跟踪子进程时候...查阅 Laravel 队列文档,发现 Laravel 队列实际也提供了不重启进程模式,这样就不会频繁创建大量临时文件,进而也就不会消耗大量 dentry 缓存,推荐使用。

78070

Laravel中利用队列发送邮件方法示例

前言 本文主要给大家介绍了关于Laravel队列发送邮件相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细介绍: 批量处理任务场景在我们开发中是经常使用,比如邮件群发,消息通知,...短信,秒杀等等,我们需要将这个耗时操作放在队列中来处理,从而大幅度缩短Web请求和相应时间。...下面讲解下Laravel队列使用 1、配置文件 config/queue.php <?...其中还包含了一个null队列驱动用于那些放弃队列任务。...fa/【本文中一些PHP版本可能是以前,如果不是一定要,建议PHP尽量使用7.2以上版本】/iled配置项用于配置失败队列任务存放数据库及数据表。 接下来我们需要创建一个队列任务类。

1.4K30

Laravel队列一些细枝末节

不过现在我承认有点喜欢「Laravel」了,虽然性能依然是无法回避短板,但是又有几个网站能触及其性能瓶颈呢?而它丰富组件则实实在在节约了开发者大把时间,比如本文要说队列。...在 Laravel 里调用队列功能是非常简单一件事情,详细介绍参考官方文档: <?...其中 sync 乍一看会觉得很奇怪,不过实际它在开发测试阶段超级方便,此外 database、redis 等方案更像是一种模拟,所以说 beanstalk 是目前最合适选择。...Laravel 队列消费者有两种启动方式,分别是:queue:listen 和 queue:work,我建议你彻底忘记第一种方式,我甚至不理解它为什么存在,因为它不仅低效,而且可能会导致一些莫名其妙问题...,具体可以参考:一个Laravel队列引发报警。

53820

记录一次 laravel 项目队列拥堵问题

项目的队列使用database 作为队列驱动,在任务入队之后发现并未生效。所以对问题进行排查。...首先查看 failed_jobs 表,发现并没有失败任务生成记录,然后查看jobs 表,发现确实已经入了 jobs 表记录。...connection\";N;s:5:\"queue\";N;s:5:\"delay\";i:21820635;}"}} 发现maxTries 和timeout 字段都是null,这个时候该任务会无限期执行,导致队列堵塞...找到问题,进行解决,在对应job 文件下添加最大尝试次数参数 class DataMark extends Job { public $tries = 5; //添加最大尝试次数...return true; } } 最后删掉那条一直在重试任务,新入队任务都有重试次数限制了,不会出现一直重试导致拥堵情况啦。

44310

PHP-web框架Laravel-队列(三)

并发处理Laravel队列系统默认是串行处理作业,这意味着每个作业都要等待前一个作业处理完毕后才能开始处理。但是,有时候我们需要同时处理多个作业,这就需要并发处理。...作业优先级Laravel队列系统还支持作业优先级,这意味着我们可以为不同类型作业分配不同优先级。优先级高作业将在优先级低作业之前处理。优先级默认为0,值越高表示优先级越高。...Laravel默认作业超时时间为60秒。我们可以在定义作业类时使用--timeout选项来设置超时时间。...重试作业Laravel队列系统默认会自动重试作业,如果一个作业失败了,它将被重新推送到队列中,直到达到最大尝试次数。最大尝试次数默认为3,可以在config/queue.php中进行配置。...Laravel默认会将失败作业写入日志文件。我们还可以在config/queue.php中配置将失败作业发送到其他通知渠道,例如电子邮件或Slack。

1.1K11

基于 Pusher 驱动 Laravel 事件广播(

如果有不了解,可以在看教程前花半个小时谷歌下这些基本内容比较好。被墙了咋办,去github搜lantern,你懂得。 1.1 Pusher是什么?...=YOUR_APP_SECRET 然后,把Pusher集成到Laravel后端,有两种方式:使用Laravel Pusher Bridge;使用Laravel Event Broadcaster。...不过使用Laravel Event Broadcaster可以实现模块解耦,当有其他更好push包时可以快速切换别的服务。可以选择适合方法。...有时间可以看下Laravel Debug Bar,就是一个供Laravel调试包,地址:Laravel Debug Bar,这大牛还写了个Laravel IDE Helper也非常好用:Laravel...强烈建议把这两个包安装到你项目中,每一个新Laravel项目都可以安装下。。

2.9K31

laravel-s 在 Docker 中使用(包含队列使用)

"] 如需增加运行队列进程, 改动文件中numprocs即可 构建队列镜像 docker build ....-f queue.Dockerfile -t laravel-worker 运行队列容器 docker run -d --name=laravel-worker-service laravel-worker...队列常见说明 重启队列任务 错误做法 不可直接重启容器(会导致正在运行任务终止) 不可通过supervisord重启队列进程(会导致正在运行任务终止) 正确做法 进入容器: docker exec...-it laravel-worker-service /bin/sh 重启队列: php /var/www/artisan queue:restart 重启队列逻辑 队列开始执行时, 队列获取当前缓存时间戳...-v映射本地目录 更新代码时候是更新宿主机代码, 然后映射到容器中, 容器再按照上面的命令重启队列, 即可加载最新代码 更新代码方法3 构建好新容器镜像进行 停止旧容器队列进程 ## 执行此命令后后查看队列进程无任务输出

20710

Disque:Redis之父新开源分布式内存作业队列

它适应于"Redis作为作业队列"场景,但采用了一种专用、独立、可扩展且具有容错功能设计,兼具Redis简洁和高性能,并且用C语言实现为一个非阻塞网络服务器。...何况消息队列运作方式与Redis很不同。 那么,是不是可以新开发一个消息队列呢? 世界已经有很多消息队列了,新做一个有价值吗?...开发过程 他头一次没有直接写代码,而是花了几个星期思考设计,尝试从用户角度理解什么样消息队列会让人更爽。主要使用场景没变:延迟作业。...Disque是通用系统,但主要针对问题,是发送可能要处理作业消息。如果有什么违背了这一场景,就会被干掉。 设计有了,Antirez直接从Redis代码入手。...相关链接: Disque:Redis之父新开源分布式内存作业队列 Disque 使用教程(DisqueBook.com)

1.7K100

可视化队列管理工具 Laravel Horizon 来了

文章翻译&整理自 Taylor 博客文章 Taylor 在今天发布了一个新工具:Laravel Horizon ,它为 Laravel Redis 队列提供了一个漂亮仪表板和代码驱动配置系统。...此工具完全开源,你可以在 GitHub 找到它。 此工具需要尚未正式发版 Laravel 5.5 ,并且其本身也还处于 Beta 状态。 仪表板 ?...它提供队列工作负载、最近作业、失败作业作业重试、吞吐量和运行时指标、进程计数实时显示。...;}); 配置 与 Laravel 调度程序类似,你所有队列 worker 配置都在你代码之中: ?...标签监控 Horizon 允许你为任务分配标签,包括:邮件、广播、通知和队列监控器。事实,Horizon 可以根据附加到任务 Eloquent 模型,智能地自动分配绝大多数标签。

3.3K40

PHP-web框架Laravel-队列(二)

定义作业Laravel 中,定义作业是通过实现 Illuminate\Contracts\Queue\Job 接口来完成。这个接口定义了一个 fire 方法,用于处理作业逻辑。...$event->job->resolveName()); }); }}// .envQUEUE_CONNECTION=redis这些代码实现了一个简单队列作业。...当我们访问网站主页时,它会将一个处理播客作业推送到队列中。我们还注册了两个队列事件监听器来记录作业何时开始处理和何时处理完成。我们将队列连接设置为Redis。...当我们运行作业时,可以在Laravel日志文件中查看两个事件记录。...我们可以使用以下命令查看日志文件:php artisan log:tail通过这些代码,我们可以更好地了解如何在Laravel中使用队列来执行后台作业

58400

如何在Ubuntu 14.04使用Ansible部署高级PHP应用程序

步骤9 - 配置队列守护程序 与步骤8中名为schedule:runArtisan命令一样,Laravel还带有一个可以使用queue:work --daemonArtisan命令启动队列工作程序...在此步骤中,我们将为Laravel配置队列守护程序worker。 队列工作者与cron作业类似,因为他们在后台运行任务。...不同之处在于应用程序通过用户执行操作或通过cron作业调度任务将作业推送到队列中。队列任务由工作者一次执行一次,并且当在队列中找到它们时将按需处理。...一分钟后,它将更新为如下所示: Queue: YES Cron: YES 这意味着队列工作者正在后台正常工作。我们在上一步中启动cron作业作业推送到队列中。...此作业在运行时更新数据库以显示其正在运行。 我们现在有一个工作示例Laravel应用程序,其中包括正常运行cron作业队列工作程序。

10.7K60

【地铁设计模式】--行为型模式:状态模式

什么是状态模式 状态模式是一种行为模式,它允许对象在其内部状态发生改变时改变其行为。在状态模式中,将状态定义为独立对象,并将对象在不同状态下行为委托给具有相应行为状态对象。...当对象状态发生变化时,它将使用不同状态对象来执行不同操作,从而使其行为随着状态改变而改变。 状态模式可以帮助我们更好地管理复杂状态和转换,从而使代码更加清晰和易于维护。...定义客户端类:客户端类通过调用上下文类方法来切换状态。 状态模式核心思想是将对象行为封装成不同状态类,从而使其能够在不同状态下具有不同行为。...这种方法可以提高代码可维护性和可扩展性,同时也可以让对象行为更加灵活和可控。在实际应用中,状态模式被广泛应用于各种场景,例如订单状态处理、网络连接状态管理等。...Client 是一个使用状态对象示例程序。 总结 状态模式是一种行为型设计模式,它允许对象在内部状态发生改变时改变其行为

19420

【地铁设计模式】--行为型模式:策略模式

什么是策略模式 策略模式是一种行为型设计模式,它允许在运行时选择算法行为。这种模式通过定义一系列算法,并将每个算法封装到一个独立类中,使得它们可以相互替换。...然而,使用策略模式可能会导致类数量增加,从而增加代码复杂性。此外,使用策略模式时,客户端必须了解不同策略之间区别,以便能够选择正确策略。因此,策略模式适用于复杂场景,而不适用于简单问题。...实现具体策略类:具体实现策略接口中算法方法,并提供一些算法实现具体细节。 定义上下文类:上下文类负责维护对策略对象引用,同时将客户端请求委派给具体策略对象进行处理。...在测试代码中,我们可以通过 new 关键字创建不同具体策略,并通过 Context 对象来使用它们具体实现。 总结 策略模式是一种行为型设计模式,它允许在运行时选择算法行为。...通过将算法封装在可互换策略对象中,该模式使得客户端可以动态地改变应用程序行为。该模式优点包括增强了程序可扩展性和灵活性,让算法变化独立于其他部分变化,使得代码更加易于维护和测试。

18930

【地铁设计模式】--行为型模式:命令模式

什么是命令模式 命令模式(Command Pattern)是一种行为型设计模式,它将请求(命令)封装成一个对象,以便在不同上下文中使用,并支持将操作可撤销和重做。...该模式核心思想是将命令发出者(客户端)和接收者(执行命令对象)解耦,从而实现请求发送者和接收者之间解耦。 命令模式包含以下几个角色: Command(命令接口):声明执行操作方法。...命令模式优点在于: 可以很容易地设计一个命令队列; 可以方便地实现对请求撤销和恢复; 可以很容易地将命令组合起来,实现批处理等操作; 命令模式是一种类间解耦设计模式,通过命令对象和接收者解耦,实现了请求发送者和接收者之间松耦合...命令模式缺点在于: 实现起来可能需要较多代码; 使用命令模式可能会增加系统复杂性; 如果请求操作有过多不同种类,则可能需要实现过多 ConcreteCommand 类。...总结 命令模式是一种行为型设计模式,其目的是将一个请求封装为一个对象,从而使不同请求可以被多个对象处理。命令模式中包含三种主要角色:命令接口、具体命令和命令执行者。

28620

laravel+Redis简单实现队列通过压力测试高并发处理

直接上代码 代码流程 1.模拟用户请求,将用户写入redis队列中 2.从用户中取出一个请求信息进行处理(可以在这个步骤做更多处理,请求过滤,订单复购等) 3.用户下单(支付等),减少库存。...is_null($num)) {        ///将需要秒杀商品放入队列中 $this->AddGoodToRedis(1);        ///需要注意是我们如果写是秒杀活动的话...,需要做进一步处理,例如设置商品队列缓存等方式,这里就实现了        ///下订单减库存 $this->GetGood(1,$num); }...,有非常详细讲解 https://www.jianshu.com/p/43d04d8baaf7 调用 代码中 AddUserToRedis() 方法将一堆请求用户放进redis队列中 先看库存 这里设置了一千个库存...这个是因为apache bench会以第一个请求响应内容作为基准, 如果后续请求响应内容不一致会标记为失败,如果看到length中标记数量不要方,基本可以忽略,我们请求实际是完成了

1.1K20
领券