如果不是所有的NSB例子爲ASP.NET(或MVC)具有Web應用程序使用Bus.Send
發送消息,並可能是註冊一個簡單的回調,這基本上是我如何在我的應用程序中使用它。ASP.NET應用程序可以處理NServiceBus事件嗎?
我想知道的是,如果在同一個ASP.NET應用程序中可能和/或對句柄消息有任何意義。
主要的原因我問的是緩存。該過程可能是這樣的:
- 用戶從Web應用程序發起請求。
- Web應用程序向獨立應用程序服務器發送消息,並將更改記錄在本地數據庫中。
- 在來自同一用戶的未來頁面請求中,Web應用程序知道該更改並將其列爲「待處理」狀態。
- 一堆東西發生在後端,最終請求被批准或拒絕。參考原始請求發佈事件。
- 此時,Web應用程序應該開始顯示的最新信息。
現在,在一個真正的web應用程序中,這個掛起的請求將被緩存,很可能很長一段時間,因爲否則應用程序必須在數據庫中查詢掛起的更改每次用戶要求提供當前信息。
所以,當請求最終完成對後端 - 這可能需要一分鐘或一天 - Web應用程序的需求,至少,爲了無效該緩存條目,做一套DB查詢。
現在我意識到這可以通過SqlDependency
對象等來管理,但是讓我們假設它們不可用 - 可能它不是SQL Server後端,或者當前信息查詢可能轉到Web服務, 隨你。問題是,Web應用程序如何意識到狀態的變化?
如果它是是可能在ASP.NET應用程序中處理NServiceBus消息,那麼處理程序的上下文是什麼?換句話說,IoC容器將不得不注入一堆依賴項,但它們的範圍是什麼?這是否全部在HTTP請求的上下文中執行?還是一切都需要靜態/單身的消息處理程序?
對這類問題有更好的/推薦的方法嗎?
我不知道如何處理IIS中的事件,但是無論何時您引入異步過程,您都必須處理最終的一致性。網絡應用程序是否需要立即更新,或者每分鐘15分鐘每小時刷新一次緩存? – Ryan
@Ryan:我們可以逃避嗎?大概。我對客戶POV感到滿意嗎?不是真的。我對EC一般都很滿意 - 例如,我意識到,如果網站或應用程序池未運行,直到它再次啓動,並且* *完全正常 - 但信息應該已啓動在某些用戶實際請求它的幾分鐘之內,數據真的應該被緩存更長的時間。這種差異通常通過手動或基於依賴關係的緩存失效來解決。 – Aaronaught
對,這就是我在我的同步應用程序中所做的。對於NSB,我只是每次都碰到數據庫,但我只有幾個用戶的後臺應用程序。 – Ryan