PHP Laravel队列';s事件和作业


PHP Laravel Queue's Events and jobs

我有一个问题

我有一个简单的系统,其中User创建Booking用户创建预订后,将向用户发送电子邮件和短信。

我有多种方法来处理这个

  1. 预订后,发送电子邮件和短信(阻止)
  2. 预订后,Fire举办了一场可排队的活动,有两名听众。其中一个发送电子邮件。第二个发送短信
  3. 预订完成后,Fire和event将排队2个作业,一个发送电子邮件,第二个发送短信

选项1是不可行的,因为它正在阻止,并且没有重试到我的事务性电子邮件提供商或SMS提供商。

选项2是可行的

选项3是可行的

将来,我希望能够在没有BookingConfirmation事件的情况下发送相同的电子邮件/短信,所以我最终需要可以在没有事件的情况下排成队的工作。

或者事件部分只是开销,我可以直接从控制器排队而不是触发事件吗?

我基本上是在问我是应该使用Events还是只使用Jobs?

谢谢!

事件非常有用,因为您可以单独触发一个事件并执行多个操作。

这意味着,如果将来你想有第三个操作,如果你使用事件,你可以添加另一个事件回调,同时如果你跳过事件并直接将作业放入队列,你必须修改控制器以放入第三个动作。

方便之处在于,您不必为了添加新功能而更改任何方法。

归根结底,这取决于开发人员。事件在每个操作之间提供了更好的代码。但就表现而言,我认为是一样的。

我会将所有任务作为作业放在一个队列中,然后在作业完成时触发事件(作业的最后一行),这样你就可以执行任何后续操作或想要执行的事情来通知使用情况。

因此,您可以为每个任务指定一个作业,并使其保持简单,同时减少每个任务中需要跟踪的异常或错误。

例如,我目前使用的系统使用事件来触发下一个作业,但其他任务我会同时触发多个作业。

例如
用户点击预订
派遣工作电子邮件
工作电子邮件已排队
已处理工作电子邮件
工作电子邮件发送事件
侦听器拾取的事件
监听器调度作业短信
作业SMS已排队
已处理作业短信
工作短信发送事件
侦听器拾取的事件
你还想做什么…

听起来可能有很多步骤,但都很短,然后很容易遵循和更新。