问题标签 [laravel-queue]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 我应该使用 Laravel 队列来管理我的应用程序中的线程吗
我正在寻找多个 3rd 方 API 来收集用户搜索查询的信息。我计划为每个我想要访问的 API 分拆一个线程,以最大限度地减少我的响应时间。由于内存/cpu 问题,我还想限制我的应用程序在任何时候可以运行的线程数量。
由于我使用 Laravel 作为我的框架,因此我试图使用 Laravel 队列来完成此任务,但似乎我可能无法从作业中获取响应数据。
- laravel 队列是解决这个问题的正确方法吗?如果是这样,我如何监听作业的状态并在作业完成后检索数据?我看到了一些指向将关闭传递给工作的东西,但有些东西对我来说并不合适。
php - 在 Laravel 队列/重命名作业表中自定义作业和作业表
当我尝试php artisan queue:table
它给了我以下错误
这是因为我已经CreateJobsTable
为其他目的命名了迁移。我无法重命名此表和迁移。有没有办法将迁移重命名为CreateJobsQueueTable
或相关的东西?
我们可以重命名 artisan 使用“queue:table”创建的工作表吗?
php - Laravel 5.3 队列在共享主机中不起作用
在我的 Laravel 5.3.* 应用程序中,我在后台运行队列。这在我的本地机器上工作得很好。但是,当它在服务器(共享主机)上运行时,它根本不起作用。
这是场景:
管理员正在提交管理员生成器表单数据。
数据被插入到数据库中。
拍摄有关相同的电子邮件。
所以,为了让这个功能顺利进行,我在服务器的 cPanel 上创建了一个 cron 作业。
这是 cron 作业:
这是app/Console/Kernel.php
文件内容
我还通过运行创建了作业数据库
生成/插入管理员时,会触发一个事件:
这将向提供的电子邮件 ID 发送一封欢迎电子邮件(in app/Listeners/AdministratorHasBeenGenerated/SendWelcomeEmail.php
)
这是 .env 文件中的邮件配置
我没有收到任何错误或类似的东西,但即使我提供了正确的电子邮件 ID,我也没有收到任何欢迎电子邮件。
更新 1:2017 年 12 月 21 日
这只是一种解决方法,因为我找不到这个问题的实际解决方案。我所做的是我为运行队列创建了另一个 cron 作业。
这将queue:work
每分钟触发一次命令(或您在 cPanel 的 cron 作业选项卡中设置的任何内容)..
我猜上述解决方案不正确。欢迎更正/修正。
任何人都可以指出我必须在哪里和做什么的错误吗?已经4个多小时了,我找不到任何解决方案。
非常感谢任何帮助。谢谢。
laravel - 无法让 Cron 作业完美运行
我使用 Laravel/Lumen。我设置了一个简单的工作来发送短信:
现在,每当记录保存在我的控制器中时,我都会调度作业:
现在我的 kernel.php 中有以下设置:
在我的 cPanel 中,我设置了以下 cron 作业:
上面的命令设置为每分钟运行一次。
问题 这个设置根本不适合我。在我的 Bluehost VPS 上,它导致我的服务器多次崩溃,迫使我重新启动。显然它占用了这么多内存,我不明白为什么,支持也无法帮助我。让我澄清一下,它有效,但导致我的服务器每天至少崩溃两次。
所以认为这与我的托管有关,我在其他地方(SiteGround)购买了另一个托管。现在我什至无法让 cron 工作。每次 cron 执行时都会发送到我的邮件:
现在我不知道是什么原因造成的,也不知道如何解决。我相信我已按照文档中的所有说明进行操作,并且无法判断我在这里做错了什么。我已经完成了研究并联系了两家托管公司的支持人员,但仍然......
这是我从支持人员那里收到的最后一条消息:
我尝试运行 cron 几次,但它没有任何预定的命令要运行:
此外,我再次增加了限制。我为脚本的执行设置了 300 秒和 2048MB memory_limit。
请再试一次,如果您需要任何帮助,请不要犹豫更新票证。
Lumen和jobs有什么问题吗?我在 Laravel 5.1 中成功运行命令这里发生了什么。
或者,如果有更简单或有效的方法可以通过 cron 使用常规 PHP 执行此脚本,请告诉我如何。
php - 从 Supervisord 调用 Laravel 脚本时找不到类
我正在使用 Laravel 工作人员来执行一些后台任务。当我使用 'php artisan queue:work' 调用工作人员时,它可以正常工作
但是当我在 CentOS 中将相同的命令添加到 supervisord 时,使用以下配置:
[程序:laravel-worker]
process_name=%(program_name)s_%(process_num)02d command=php
/var/www/html/laravel/工匠队列:工作
自动启动=真
自动重启=真
用户=根
numprocs=8
重定向标准错误=真
stdout_logfile=/var/www/html/laravel/worker.log
我收到以下错误:
PHP 致命错误:在第 169 行的 /var/www/html/laravel/app/External/library/RegistrationService.php 中找不到类“SoapClient”
[Symfony\Component\Debug\Exception\FatalErrorException] 类 'SoapClient' 未找到
作业未执行,抱怨未找到 SoapClient(尽管已安装)。SoapClient 类由我在外部加载的普通 PHP 类继承。
请注意,当从命令行执行时,我可以通过控制器或作业使用此类,而不会出现任何问题,只有在 supervisord 中它才会给我错误消息。更奇怪的是,它只发生在一个使用这个外部类的作业上,它不会发生在只使用 Laravel 的类(控制器、事件等)的作业上。
php - 如何防止排队作业失败后执行?
我已将我的主管工作人员配置为在失败的情况下尝试 laravel 排队作业 3 次。以下是我的工作人员配置示例。
但是我确实有一个特定的 laravel 作业队列,无论是否失败,我都只想执行一次。如果在不更改我的工作人员配置的情况下出现故障,我想防止将来尝试执行作业。
下面是我的工作类的结构。
任何帮助将不胜感激!:)
php - 如何在 Laravel 5.4 的队列中传递函数?
我正在使用 Laravel 5.4 队列。我想在几秒钟后阅读 Excel 并在数据库中输入该记录。
这是我的调用函数,首先我可以这样通过吗?
php - Laravel 排队的作业运行时间比超时时间长很多分钟
我有一个从网页中提取链接的 Laravel 排队作业。通过 Laravel Forge 配置的 Queue 监听器的超时时间是 240 秒(4 分钟)。但是,作业最多需要45 分钟才能运行。
我的队列设置是:
并且有多个作业进程在运行——多达35 个进程。可以想象,这会占用大量服务器内存。这些过程似乎只是徘徊。这些进程的命令如下所示top
:
如果超时为 240 秒,一个作业如何运行 45 分钟?为什么会有这么多流程——不应该只有一个吗?
此外,任何想法为什么提取链接的脚本需要 45 分钟才能运行?
该脚本确实有效,也就是说,在大多数情况下,它按预期运行——它只需要很长时间。据我所知,没有报告/记录错误。
工作中的代码是:
更新:另一个简单的工作运行得很好,不到一秒钟。特别是上面的链接作业需要 10 分钟。可能是RAM问题还是什么?我还能做些什么来诊断问题吗?作为控制台作业的一部分运行时,提取链接功能本身会在 1 或 2 秒内运行。它只是在队列中吓坏了。
php - Laravel 队列:重启不会杀死工人
我有一个通过 envoyer 部署到非伪造服务器的 laravel 5.4 应用程序。我在数据库驱动程序上运行队列工作程序,使用主管进行监控,按照文档中的描述进行设置;
并使用特使部署挂钩
问题是,在每次部署之后,队列工作人员都没有重新启动,旧的工作人员继续运行,然后抛出错误,因为他们正在处理以前版本的代码。从 CLI 手动运行 queue:restart 也不起作用。
如果我手动找到并杀死 8 个正在运行的进程,主管确实会正确重新启动它们,并且我的排队作业会再次工作。
谁能想到任何可能阻止这些工人被杀的事情?storage/logs/laravel.log 中没有任何相关内容
laravel - 对 Laravel 5 发送邮件的队列感到困惑(Laravel 5.4)
我从 Laravel 升级4.1
到5.4
. 队列迁移很困难。
首先,我从路线中注释掉iron
路线:
然后,我配置了数据库驱动程序并迁移了jobs
表:
我将Mail::queue
代码更改为 Mailables,如下所示:
我成功同步发送邮件(没有队列)。然后,我切换到队列:
最后,我从控制台运行这个命令:
执行Mail::to
一行时,会向Jobs
表中插入一行,但不发送邮件。我怎么解决这个问题?
注意:ForgotPassword
是一个Mailable
类(应该是一个Job
类?)。