2013-01-02 45 views
4

鑑於Web是一種非常單向的同步體系結構,使用MVC4的NSB Web應用程序有什麼好處嗎?NServiceBus在Web/MVC4 + SQL體系結構中有用嗎?

我喜歡NSB自帶的容錯性和易用性,但是由於該技術都是關於單向異步消息傳遞的,所以我怎樣才能以這種方式設計我的應用程序,使得用戶不會經常)注意到他們的命令在回發時沒有完成?在設計我的UI時,我應該採用什麼樣的方式來自然地適合NServiceBus的曲率?

事實上,它似乎NSB是一個網站,它的SQL存儲,因爲用戶總是假設「工作」時,他們的瀏覽器做清爽完成之間的不必要的複雜性。在這方面我錯了嗎?

編輯:我見過其他解決方案,每個命令處理程序在NSB服務完成工作時發佈事件,並且ASP.NET項目上的事件處理程序將創建Java腳本的「存根文件」啓用頁面不斷輪詢以指示操作已完成。這是彌合單向同步和異步平臺之間差距的唯一方法嗎?

+1

你應該考慮在SignalR中使用NServiceBus。您可以擁有一個集線器,其中包含一個將通知客戶端完成命令的方法。當一個命令完成時,NServicebus將調用Hub服務器代碼。 – rpgmaker

+0

昨晚我看着SignalR。我喜歡它作爲雙工通信的解決方案,但它不會在網絡上使用NSB購買任何東西。核心問題是命令可能會或可能不會在回發完成之前執行。我懷疑答案是否定的,NSB與Web不兼容,或者我需要從根本上處理User Inerface設計。 –

+0

如果將命令完成存儲在數據存儲中,則使用SignalR仍然可以工作。當回發完成時使用SignalR讀取它 – rpgmaker

回答

3

NServiceBus非常適合任何Web前端。您只需要瞭解異步消息處理如何影響您的用戶界面。在大多數情況下,可以簡單地向用戶指出該請求已被接受並將被處理。但在其他情況下,您可能需要放棄最終一致性以立即保持一致。

例如,對於用戶註冊時,我通常檢查用戶名的可用性,然後立即註冊用戶,但我將命令發送到電子郵件激活消息,使用戶不必等待。用戶最終收到他們的電子郵件。因此會顯示一條消息,指出將發送電子郵件,並且即使郵件只能在5分鐘內發送,也需要單擊激活鏈接。

另一個例子是一個應用程序,用戶可以各種文檔格式轉換爲TIFF。該請求將被髮送,Web前端將輪詢等待轉換結果,然後顯示轉換後的頁面。

所以它會影響你的UI/UX的工作方式。這絕對是有用的,並且在某些情況下讓你的生活變得更加輕鬆。

在我來說,我用我的FOSS班車服務總線:http://shuttle.codeplex.com/ ---但無論如何概念應用。

+0

我喜歡這個答案,因爲它提供了一個可能的解決方案,即命令無法保證在眨眼間執行。我承認Udi在他的關於CQRS設計的博客文章中提出了類似的攻擊計劃。 –

3

NServiceBus具有鉤到典型的MVC的Web應用程序,讓您導致用戶的回傳等到響應到達在總線上。查看AsyncPages示例以瞭解它是如何完成的。

+0

這是一個艱難的召喚,但我選擇了Eben的答案,因爲它提供了一些有關命令「永遠」執行的場景的一些想法。爲了記錄,我會說,命令完成時發送電子郵件的想法與您在CQRS實施方面的博客非常相似,這是我努力實現的(最終)。感謝您的好產品先生。 :) –