2011-11-22 56 views
0

我在一個pub/sub應用程序中爲web應用程序上的事件通知使用NServiceBus。現在,當發生某些事情時(例如創建便箋),會在總線上創建併發送一條消息,然後用戶選擇該消息並確定需要獲得有關該事件的電子郵件或短信通知的人員。當使用沒有Sagas的NServiceBus pub/sub時的延遲消息處理

我想要做的是對處理流中的某些事件進行延遲。這種延遲的目的類似於電視直播中7秒的延遲 - 它讓用戶解僱了他們所做的事情。我們的活動CommentCreated。當我的服務層保留新評論時發送此事件。這個評論可以被標記爲私人或內部,並且用戶創建評論然後意識到他們應該標記爲私人評論並不罕見。

我想,原因之一,我不是他們精明做到這一點延遲沒有傳奇故事,兩個,他們似乎有點爲這個簡單的要求矯枉過正,和三我不想處理另一個數據庫服務器來堅持他們的數據。貧民窟選項將在我的用戶處理程序中設置一個計時器,並在處理前等待幾分鐘,但這只是感覺不對。

是否可以在NServiceBus中執行此操作?我知道有些人會說,以創建一個查詢服務,但那種失敗服務總線的目的...

+1

是否有任何理由讓用戶看不到用戶界面上的註釋,並且不會將它們推回到後端直到晚些時候? –

+0

好吧,既然我已經有了NSB pub/sub,我想在那裏處理它。由於應用程序是一個Web應用程序(MVC,所以沒有狀態),這會增加複雜性來保留便箋,但會延遲事件觸發。我只是在談論一個短暫的延遲 - 不超過5分鐘。 –

+0

我在想,你會堅持在DOM(jQuery或其他),而不是Bus.Send()到服務器的筆記,直到他們採取了一些行動(按鈕,離開頁面)。這將是一個沙盒,直到他們真正想要保存。 –

回答

2

有,我知道的,除了傳奇沒有漂亮的方式 - 無論是使用NServiceBus自己的Saga<...>,或通過自己有效地實現傳奇 - 並使用某種超時機制,如eg NServiceBus的超時服務。

我同意你的觀點:滿足這個要求可以很簡單 - 因爲所需的基礎設施已經到位!如果你堅持建造這個貧民窟的方式,但是,我認爲不要認爲滿足要求很簡單。

I.e.當NServiceBus設置了適當的超時服務和一種持續傳奇的方式時,實現這一點將很簡單。但是,如果使用定時器和其他方法來破解這個問題,只會引發各種各樣的麻煩,比如,定時器不會在IIS回收您的Web應用程序時觸發,等等。

+0

關於貧民窟路線的問題你是對的。定時器方法最大的問題是NSB處理事件*然後*定時器觸發。如果在事件到達和延遲計時器觸發期間訂戶服務器出現故障,事件將會丟失。看起來我不得不在超時時間使用傳奇...但是NSB自帶的超時管理器由於其工作原理而不適用於生產環境。 –