Amazon ec2 在AmazonEC2上运行NServiceBus

Amazon ec2 在AmazonEC2上运行NServiceBus,amazon-ec2,nservicebus,esb,Amazon Ec2,Nservicebus,Esb,因此,我看到了一年前的许多参考资料和链接,询问有关支持的信息。想知道最近是否有人试图对这件事做些什么 我看过以下文章/帖子,但担心这些信息和相关链接已经过时 我在NServiceBus论坛上看到很多关于“下一个版本”的讨论,重点是对云的支持(当时的版本是2.5)。我有一个场景,我想在Amazon EC2实例集群上运行NServiceBus w/MSMQ或RabbitMQ,但我担心的是,没有更多关于人们在Amazon上实际使用NServiceBus的讨论 有人成功地做到了这一点,或者有理由避

因此,我看到了一年前的许多参考资料和链接,询问有关支持的信息。想知道最近是否有人试图对这件事做些什么

我看过以下文章/帖子,但担心这些信息和相关链接已经过时



我在NServiceBus论坛上看到很多关于“下一个版本”的讨论,重点是对云的支持(当时的版本是2.5)。我有一个场景,我想在Amazon EC2实例集群上运行NServiceBus w/MSMQ或RabbitMQ,但我担心的是,没有更多关于人们在Amazon上实际使用NServiceBus的讨论

有人成功地做到了这一点,或者有理由避免考虑这一点


[编辑]-有人知道使用保留实例是否可以解决上述文章中描述的EC2重启问题吗?

在EC2上成功运行NServiceBus有不同的方法。选择哪种选择需要权衡成本、可扩展性和运营开销之间的平衡

MSMQ NServiceBus在带有MSMQ的EC2上运行良好,但有一些障碍需要注意。主要问题是EC2实例上的计算机名称/DNS名称在每次重新启动期间都会发生变化。这是一个问题,因为向端点发送消息时以及订阅消息时都会使用计算机名。克服此开销的一个简单选项是将弹性IP附加到实例&使用其DNS名称。这样做的好处是很容易做到。缺点是,默认情况下,您只能获得5个弹性IP。你可以要求更多&亚马逊通常非常自由地提供额外的弹性ip。你的规模也会受到限制。例如,您不能简单地插入AWS的弹性缩放功能。您还必须处理备份。我会将队列放在单独的EBS卷上,并每隔一段时间拍摄快照

如果你想使用消息传递,我会选择这个选项,但是你没有真正疯狂的SLA,你不需要快速地放大和缩小机器,你也不需要处理大量的消息。大多数项目都是这样

亚马逊简单队列服务 您可以为SQS编写自定义传输。将NSB与SQS远程队列一起使用的好处是,您可以获得高可用性队列,不必在EC2实例上管理它们&您不必担心备份。使用这种方法也更容易利用弹性伸缩。缺点是每次读取的成本为$$$,因此,以与MSMQ或RabbitMQ相同的速度进行读取在经济上可能不可行,尽管支持长轮询和在一次调用中下载多条消息的能力缓解了此问题。另一个缺点是它不支持带有DTC的分布式事务。如果您使用的是NServiceBus 5或更高版本,则可以在传输中实现发件箱模式(如上所述),以确保您的消息仍然只处理一次。否则,由您来确保端点和处理程序具有适当的幂等性解决方案。您可以通过调整每个端点的轮询间隔来调整速度与成本&甚至可能有一个退避策略,如果您有一段时间没有收到消息,可以减少轮询间隔。您还必须担心消息的大小,因为SQS的大小限制很小(256K)。在大多数消息中,你都不会碰到这个问题

如果读/写速度不是问题,但您不想担心在操作上支持您的排队基础设施,我会选择此选项

兔子 我个人还没有在EC2上玩过RabbitMQ,但是快速搜索中发现了一些关于如何在EC2实例上安装和运行RabbitMQ的文章。有一个成熟的RabbitMQ传输可用,它支持自NServiceBus版本5起的保证一次性的消息处理,如上面链接中所述。这将比SQS更便宜&我听说集群比MSMQ更容易。最后,像MSMQ一样,您必须提出备份策略(可能使用快照)

混合的
没有人说你必须选择一个排队系统。您可以将SQS用于需要高可用性的端点&您不介意支付$$$,然后将MSMQ/RabbitMQ用于系统的其余部分。

nservicebus文档页面上有一页介绍了如何解决服务器名称更改问题: