繁体   English   中英

PHP Laravel 队列的事件和作业

[英]PHP Laravel Queue's Events and jobs

我有个问题

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

我有多种方法来解决这个问题

  1. 预订成功后,发送邮件和短信(屏蔽)
  2. 预订完成后,触发一个可排队且有两个侦听器的事件。 一个发送电子邮件。 第二个发送短信。
  3. 预订完成后,Fire 和 event 将排队 2 个作业,一个发送电子邮件,第二个发送短信。

选项 1 是不可行的,因为它被阻止并且没有重试我的交易电子邮件提供商或 SMS 提供商。

选项2是可行的

选项3是可行的

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

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

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

谢谢!

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

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

方便在于您无需更改任何方法即可添加新功能。

归根结底,这取决于开发人员。 事件在每个动作之间提供了更好的代码。 但在性能方面,我认为是一样的。

我会将所有任务作为作业放入队列中,然后在作业完成时触发事件(作业的最后一行),因此您可以执行任何后续操作或您想做的事情来通知使用。

因此,您可以为每项任务分配一份工作并保持它们的简单性,并减少要跟踪每项任务的异常或错误。

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

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

听起来可能有很多步骤,但所有步骤都很短,而且易于遵循和更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM