PHP Laravel Queue的事件和工作

时间:2016-04-05 19:00:49

标签: php laravel

我有一个问题

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

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

  1. 预订完成后,发送电子邮件和短信(阻止)
  2. 预订完成后,点击一个可排队且有两名听众的活动。一个人发送电子邮件。第二个发送短信。
  3. 预订完成后,Fire和事件,将排队2个工作,一个发送电子邮件,第二个发送短信。
  4. 选项1是禁止的,因为它是阻止的,并且没有重试我的交易电子邮件提供商或SMS提供商。

    选项2可行

    选项3是可行的

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

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

    我基本上都在问我是否应该使用这些事件或只使用工作?

    谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

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

在一天结束时,这取决于开发人员。事件在每个操作之间提供更好的代码但是表现明智,我认为它是一样的。

答案 1 :(得分:0)

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

因此,您可以为每项任务找到一份工作并保持简单,并且还可以减少每项任务的异常或错误。

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

EG。
用户点击预订 发送工作邮件
   工作电子邮件排队
工作电子邮件已处理完    工作电子邮件发送事件
听众聆听的事件    听众发送工作短信
   工作短信排队
处理作业短信
   作业短信发送事件
听众聆听的事件    你想做的其他事情......

可能听起来很多步骤,但都很简短,然后很容易理解和更新。