2011-10-31 107 views
2

我們有一個ASP.NET MVC網絡應用程序,它允許用戶將消息發佈到網站上。除此之外,用戶還可以在發佈消息時將該消息內容聯合到其他第三方系統。異步發送消息給第三方系統 - 隊列?

目前,這是同步完成的,所以當他們點擊'發佈'按鈕時,我們會將他們的消息保存到數據庫,然後依次通知每個第三方系統。我們需要提高此操作的可伸縮性和持久性,因此我希望以某種方式使操作的通知方面異步。

我能想到下面possiblities

  • 保存第三方信息到數據庫表中,並有一定的工作進程讀取表項和發佈到第三方系統。
  • 使用某種像nServiceBus或RabbitMQ的一個「正確」的消息隊列(我沒有經驗與其中任一)

有沒有更好的方式來做到這一點?我特別感興趣的是如何通知用戶郵件已正確聯合(因爲它是異步),以及如何處理多個重試失敗,此時發件人應該放棄。

感謝

詹姆斯

回答

1

NServiceBus是實現異步通信的大框架。如果將它用於此用例,您將看到許多其他機會來應用消息傳遞以提高系統的可伸縮性和可靠性。

創建MessagePosted事件消息,該消息在消息被持久保存到數據庫後發佈。對於可能被通知消息的每個第三方系統,創建一個實現IHandleMessages的事件處理程序類。

NServiceBus促進了多次重試失敗,只要在事件處理程序中拋出異常(如果出現錯誤)。在事件移至錯誤隊列之前,該事件將重新提交給事件處理程序以進行可配置的重試次數。

要通知用戶,您可以創建狀態視圖或顯示最新消息通知結果的小部件。如果第三方系統無法通知您可以考慮向用戶發送電子郵件,以便他可以採取行動。

使用此發佈訂閱樣本以快速起牀:http://docs.particular.net/samples/pubsub/