2012-10-13 70 views
4

我正在使用本地數據中心的持久層在Amazon(AWS)雲中創建新的ASP MVC訂單應用程序。我將使用CQRS模式。該項目的目標是使用隊列來存儲和轉發寫入(命令/事件)的高可用性,這些寫入(命令/事件)可以在本地數據中心異步獲取和處理。然後,如果廣域網或本地數據中心發生故障,我的雲MVC應用程序仍然可以接受訂單並將其排隊,直到處理可以恢復。如何使用NServiceBus在AWS中實現消息隊列和處理

我首先想到的是使用AWS SQS進行排隊,並在自己的C#應用​​程序來處理傳入的消息/事件創建自己的隊列消費者/調度程序/處理程序。

MVC(@亞馬遜) - >事件/ POCO - > SQS - > QueueReader(@我的數據中心) - > DB

後來我發現NServiceBus。 NSB似乎很好地處理了很多細節:消息處理,重試,錯誤處理等。我討厭重新發明輪子,而NServiceBus看起來像一個功能完備且成熟的產品,對我來說是完美的。

但在進一步的研究,它看起來並不像NServiceBus是真正的意思被使用在廣域網物理上分開的環境(雲到數據中心我)。 Google和SO並沒有真正描繪出像我需要的那樣在WAN上使用NServiceBus。

我可以這樣做嗎?

MVC(@亞馬遜) - >事件/ POCO - > NServiceBus通過WAN - > NServiceBus處理器(S) - > DB

我如何使用NServiceBus跨廣域網?還是有更好的解決方案來處理亞馬遜和本地數據中心之間的排隊和消息處理?

+0

NServiceBus現在完全支持SQS,因此您可以完全按照您最初計劃在數據中心中執行代碼的方式來獲取由您的亞馬遜的MVC前端通過它發送的消息。以下是關於NServiceBus中SQS的文檔:https://docs.particular.net/transports/sqs/ –

回答

6

使用SQS作爲NServiceBus運輸是一種選擇,但你必須描述here要意識到權衡的。這已經在Azure隊列存儲中完成了,儘管我沒有意識到任何優秀的SQS實現。

另一種選擇是在數據中心和AWS VPC之間創建VPN。如果您在相應的安全組中打開適當的端口,這將允許AWS服務器和您的數據中心之間直接進行MSMQ通信。這種方法有一些注意事項。首先,關於端點名稱。 NServiceBus 2.6及更低版本使用Environment.MachineName作爲端點的名稱,爲此您必須設置適當的DNS。我相信後來的版本會使用機器的IP地址。也許更重要的警告是VPN使你的系統更加耦合。

還有一種方法,就是用一個gateway的NServiceBus概念。然而,這應該是一個合理的商業決策。網關與常規交通工具非常相似,但通常具有不同的業務背景。

+0

從編碼的角度來看,VPN將是最簡單的。另一種選擇是爲您的內部部署解決方案的網關創建一個通道,以查詢SQS。 –

+0

假設VPN不是一個選項......並且我的主要目標是從本地解耦雲,最佳方法是1)MVC - > NSB.Gateway - > WAN - > NSB.Gateway,或者2)MVC - >事件POCO - > SQS(WAN) - > NSB作爲消息處理程序@僅限於本地? –

3

NServiceBus包含一個網關組件,可處理橋接物理上分離的數據中心。

http://docs.particular.net/nservicebus/gateway/

它基本上是移動通訊到一個HTTP通道並處理重試邏輯和重複數據刪除的問題,你會通常有一個Web服務。

如果您下載完整的NServiceBus軟件包(不只是通過NuGet包含它),那麼您將看到一個文件夾充滿了樣本,其中一個涵蓋了網關的使用,這是一個很好的入門方式。

相關問題