gpt4 book ai didi

php - Laravel 排队作业,在执行时间之前执行它

转载 作者:行者123 更新时间:2023-12-02 18:36:13 26 4
gpt4 key购买 nike

我创建了一个要在特定日期和时间(例如明天)执行的 Laravel 作业。我想添加一个手动按钮来覆盖时间并在设置的执行时间之前执行该排队作业。单击该按钮将创建 ajax 调用并将作业 ID 发送到服务器。这会导致工作在今天而不是明天执行。

我们可以使用以下命令手动重试失败的作业:php artisan 队列:重试 JOBIDHERE

我不确定使用什么来执行排队作业。

我可以获得作业 ID,但我不知道是否可以在设定的执行时间之前执行 Laravel 作业。

我在Google上搜索过,但没有找到任何人有这样的问题和解决方案。

我使用的是 Laravel 版本 5.8。使用Mysql 5.7

<小时/>

更新:

以下是排队作业的有效负载。

我尝试使用 Json Decode 并对其进行解码,但我不确定是否可以更新该队列的命令,以便我可以更新队列的日期和时间并将其保存回排队作业记录。

{"displayName":"App\\Jobs\\Payway\\UpdateCustomerInvestment","job":"Illuminate\\Queue\\CallQueuedHandler@call","maxTries":null,"delay":null,"timeout":null,"timeoutAt":null,"data":{"commandName":"App\\Jobs\\Payway\\UpdateCustomerInvestment","command":"O:40:\"App\\Jobs\\Payway\\UpdateCustomerInvestment\":17:{s:57:\"\u0000App\\Jobs\\Payway\\UpdateCustomerInvestment\u0000transactionType\";s:7:\"payment\";s:57:\"\u0000App\\Jobs\\Payway\\UpdateCustomerInvestment\u0000principalAmount\";d:9999;s:56:\"\u0000App\\Jobs\\Payway\\UpdateCustomerInvestment\u0000customerNumber\";s:4:\"BR-2\";s:50:\"\u0000App\\Jobs\\Payway\\UpdateCustomerInvestment\u0000currency\";s:3:\"aud\";s:58:\"\u0000App\\Jobs\\Payway\\UpdateCustomerInvestment\u0000singleUseTokenID\";N;s:55:\"\u0000App\\Jobs\\Payway\\UpdateCustomerInvestment\u0000payway_helper\";O:29:\"App\\Http\\Helpers\\PaywayHelper\":0:{}s:54:\"\u0000App\\Jobs\\Payway\\UpdateCustomerInvestment\u0000impodenceKey\";s:36:\"afedfc34-d08e-4831-a4aa-29de930d6b98\";s:49:\"\u0000App\\Jobs\\Payway\\UpdateCustomerInvestment\u0000headers\";a:0:{}s:60:\"\u0000App\\Jobs\\Payway\\UpdateCustomerInvestment\u0000localInvestmentObj\";O:45:\"Illuminate\\Contracts\\Database\\ModelIdentifier\":4:{s:5:\"class\";s:33:\"App\\Models\\Investment\\Investments\";s:2:\"id\";i:374;s:9:\"relations\";a:2:{i:0;s:8:\"investor\";i:1;s:13:\"investor.user\";}s:10:\"connection\";s:5:\"mysql\";}s:54:\"\u0000App\\Jobs\\Payway\\UpdateCustomerInvestment\u0000paywayTotals\";O:45:\"Illuminate\\Contracts\\Database\\ModelIdentifier\":4:{s:5:\"class\";s:38:\"App\\Models\\Banking\\Payway\\PaywayTotals\";s:2:\"id\";i:1;s:9:\"relations\";a:0:{}s:10:\"connection\";s:5:\"mysql\";}s:6:\"\u0000*\u0000job\";N;s:10:\"connection\";N;s:5:\"queue\";s:6:\"payway\";s:15:\"chainConnection\";N;s:10:\"chainQueue\";N;s:5:\"delay\";O:13:\"Carbon\\Carbon\":3:{s:4:\"date\";s:26:\"2019-11-12 23:35:22.752222\";s:13:\"timezone_type\";i:3;s:8:\"timezone\";s:16:\"Australia\/Sydney\";}s:7:\"chained\";a:0:{}}"}}
<小时/>

更新2:

当我反序列化payload命令时,我得到了以下信息。

enter image description here

所以我正在尝试更新该延迟日期,希望它能奏效。

但是从“Julian Stark”的回答来看,我可能还需要更新 available_at 。

我的理论是,当队列运行时,它将根据 available_at 寻找作业。但是,当作业正在执行并且有延迟时,它可能不会在该特定时间执行。该理论还有待检验。

我将更新这两个日期时间并检查一切是否顺利。

最佳答案

在类似的用例中,我刚刚更新了作业 available_at 时间,因此 queue:listen 命令会尽快执行作业。

DB::table('jobs')->where('id', $jobId)->update(['available_at' => time()]);

我不知道这是否是正确的方法,但它对我有用

关于php - Laravel 排队作业,在执行时间之前执行它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58772246/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com