4

我正在亚马逊 (AWS) 云中创建一个新的 ASP MVC 订单应用程序,并在我的本地数据中心使用持久层。我将使用 CQRS 模式。该项目的目标是使用 Queue(s) 来存储和转发可以在我的本地数据中心异步获取和处理的写入(命令/事件)的高可用性。然后,如果 WAN 或我的本地数据中心出现故障,我的云 MVC 应用程序仍然可以接受订单并将它们排队,直到处理可以恢复。

我的第一个想法是使用 AWS SQS 进行排队,并在我自己的 c# 应用程序中创建自己的队列使用者/调度程序/处理程序来处理传入的消息/事件。

MVC(@Amazon)--> 事件/POCO--> SQS--> QueueReader(@我的数据中心)--> DB

然后我找到了 NServiceBus。NSB 似乎很好地处理了很多细节:消息处理、重试、错误处理等。我讨厌重新发明轮子,而 NServiceBus 似乎是一个功能齐全且成熟的产品,非常适合我。

但是在进一步的研究中,看起来 NServiceBus 并不是真的要在物理上分离的环境(云到我的数据中心)中通过 WAN 使用。Google 和 SO 并没有像我需要的那样真正描绘出在 WAN 上使用 NServiceBus 的好图景。

我可以这样做吗?

MVC (@ Amazon) --> 事件/POCO --> NServiceBus over WAN --> NServiceBus Handler(s) --> DB

如何跨 WAN 使用 NServiceBus?或者是否有更好的解决方案来处理亚马逊和我的本地数据中心之间的排队和消息处理?

4

2 回答 2

6

使用 SQS 作为 NServiceBus 的传输是一种选择,但是您必须了解此处所述的权衡取舍。这已通过 Azure 队列存储完成,尽管我不知道有任何出色的 SQS 实现。

另一种选择是在您的数据中心和AWS VPC之间创建一个 VPN 。这将允许 AWS 服务器和您的数据中心之间的直接 MSMQ 通信,前提是您在相应的安全组中打开适当的端口。这种方法有一些注意事项。首先,是关于端点名称。NServiceBus 2.6 及以下版本使用 Environment.MachineName 作为端点的名称,您必须为其设置适当的 DNS。我相信以后的版本使用机器的IP地址。也许更重要的警告是 VPN 使您的系统更加耦合。

另一种方法是使用网关的 NServiceBus 概念。然而,这应该是一个合乎逻辑的业务决策。网关与常规传输非常相似,但通常具有不同的业务上下文。

于 2012-10-13T18:05:35.167 回答
4

NServiceBus 包括一个网关组件,用于处理桥接物理分离的数据中心。

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

它基本上将消息传递到 HTTP 通道,并处理 Web 服务通常会遇到的重试逻辑和重复数据删除问题。

如果您下载完整的 NServiceBus 包(不只是通过 NuGet 包含它),那么您将看到一个充满示例的文件夹,其中一个涵盖了网关的使用,这是一个很好的入门方式。

于 2012-10-16T14:22:32.213 回答