Laravel-如何使用给定的类和属性保存任务,并每分钟再次获取它?

时间:2019-04-13 17:45:17

标签: laravel

目标:

我想检查每分钟是否可以处理特定作业。

为此,我想使用任务计划。

但是,我不确定如何通过我的API最终目标来解决它:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>http://www.nonexistingdomain.com</AllowedOrigin>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

您将如何做?


经验:

我想通过不直接向用户发送短信来节省一些金钱,仅在15分钟之后并且订单状态没有改变。

SmsNotificaton::send($user, new OrderReceived($order)); 内,我将有一个new OrderReceived($order)方法。该方法仅检查订单状态是否已更改。如果更改,我们将通过我的handle发送短信。


问题:

如何将SmsGateway$user的数据保存在数据库中,以便您每分钟可以调用 cron命令,再次获取new OrderReceived($order)$user的旧数据,以检查其是否可发送?

它应该与Laravel队列系统的工作原理非常相似,但是我试图理解序列化的工作原理,但是我无法掌握调度程序如何保存数据等等。

1 个答案:

答案 0 :(得分:1)

您要做的是使用laravel内置的Jobs&Queues

您将需要创建一个新的工作,例如CheckStatusThenSendSMSJob(),该工作在派发时将检查订单状态是否已更改或应该发送消息

然后,您无需发送消息,而是需要延迟发送工作

CheckStatusThenSendSMSJob($order)::dispatch->delay(now()->addMinutes(15));

在laravel文档中查看有关队列和延迟分派的更多信息:https://laravel.com/docs/5.8/queues#delayed-dispatching

还要确保使用队列的redis驱动程序或数据库驱动程序将队列实际设置为在后台运行(在另一个进程中)(默认情况下,一旦被同步调用,laravel安装会运行队列)