2016-04-05 73 views
1

我有一個問題PHP Laravel隊列的活動和工作

我有一個簡單的系統,其中,User創建Booking 用戶已經創建了預訂,電子郵件後和短信將被髮送給用戶。

我的,雖然多種方法可以解決這個

  1. 預訂提出後,發送電子郵件和SMS(阻塞)
  2. 預訂提出後,觸發事件是QUEUEABLE和有兩個聽衆。一個發送電子郵件。第二個發送短信。
  3. 預訂完成後,Fire和event將排隊2個工作,一個發送電子郵件,另一個發送短信。

選項1是禁止的,因爲它阻止了我的交易電子郵件提供商或SMS提供商,並且沒有重試。

方案2是做,能夠

方案3是這樣做,能夠

在未來,我希望能夠發送相同的電子郵件/短信沒有BookingConfirmation事件,所以我最終需要就業可以在沒有事件的情況下排隊。

或者事件部分剛剛開銷,我可以直接從Controller中排列作業而不是觸發事件嗎?

我基本上是問我應該使用Events還是隻使用Jobs?

謝謝!

+0

這是更多的[代碼評論](http://codereview.stackexchange.com/) – ash

+0

我會放在隊列中的東西,並讓工人拿東西時可用 – ajtrichards

+0

有興趣知道你如何排隊事件。當從隊列中取消事件消息時,您是否再次分派事件? – XuDing

回答

1

事件很有用,因爲您可以觸發一個事件並獨立執行多個操作。

這意味着如果將來您希望有第三個動作,如果您使用事件,您可以添加另一個事件回調,同時如果您跳過事件並直接將作業放入隊列中,則必須修改控制器放置第三個動作。

便利性在於您不必爲了添加新功能而改變任何方法。

在這一天結束時,這取決於開發者。事件提供每個操作之間更好的代碼。但表現明智,我認爲它是一樣的。

0

我會將所有任務作爲作業放入隊列中,然後在作業完成時觸發事件(最後一行作業),以便您可以執行任何後續操作或要執行的操作以通知使用情況。

那麼你可以爲每個任務做一份工作,並保持它們簡單,並且每個任務都要跟蹤更少的異常或錯誤。

我目前正在使用的系統使用事件來觸發下一個工作,但其他任務我一次激發多個工作。

例如,
用戶點擊預訂。
調度工作電子郵件
工作電子郵件排隊
工作郵件處理
工作電子郵件發送事件
事件拾起聽衆
監聽調度工作SMS
工作SMS排隊
招聘短信處理
工作短信發送事件
聆聽者拾起的事件
任何你想做的事情...

可能聽起來很多步驟,但所有步驟都很短,然後很容易遵循和更新。