【问题标题】:Laravel -Trigger a controller method in x minutes within a codeLaravel - 在代码中在 x 分钟内触发控制器方法
【发布时间】:2017-06-08 06:25:22
【问题描述】:

在我的控制器方法中,

一旦所有付款细节都经过格式验证,

我们开始付款。

现在,在启动此(以及其他所有)付款时,我需要在 15 分钟内安排一次控制器调用,并使用参数(支付网关令牌)检查付款是否已完成..否则将其关闭。

现在,我可以每分钟使用一次 cron 来检查 15 分钟前的付款。但是运行一次预定的调用会比每分钟无休止地运行一个 cron 来减少系统的工作量和压力。

我探索了 laravel 中的选项,例如排队或任务调度。但都不是一次性调用(任务调度)或x分钟内排队。

出于给定要求的类似理由,我是否缺少某些东西或 laravel 中的某些功能?

【问题讨论】:

  • 每隔 15 分钟安排一次任务有什么问题?
  • 那行不通..在你的情况下......假设计划任务在上午 10 点运行,我在上午 10:10 支付了 P1。现在下一个计划任务在上午 10:15 运行,但无法选择 P1(因为 P1 的 15 分钟持续时间尚未过去)。现在 10:30 的下一个计划任务将运行并选择 P1。从 P1 进入启动状态将是 20 分钟。没有解决目的
  • 付款完成后不能调用你的函数,还请粘贴一些代码
  • 所以,我认为你最好自定义你的流程而不是任务调度
  • 我需要调用该函数...但在“X”分钟之后。我不想马上叫它。我有我的方法和代码。但我需要想办法在 15 分钟后调用它/安排它。

标签: php laravel scheduled-tasks laravel-5.4


【解决方案1】:

我会亲自创建一个 ValidatePaymentJob,您可以像这样在控制器方法中调用它:

public function validatePaymentDetails()
{

    //Logic for validation the payment details goes up here

    dispatch(new ValidatePaymentJob($all, $needed, $parameters))
        ->delay(Carbon::now()->addMinutes(x));
}

然后在您的 ValidatePaymentJob 中,您可以致电您的支付提供商以检查支付是否成功。您甚至可以将您的事务对象与它一起传递,并将successed 属性设置为true。

您可以查看工作文档here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 2023-03-12
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    相关资源
    最近更新 更多