使用NServiceBus在生产中设置RabbitMQ群集的最佳实践

使用NServiceBus在生产中设置RabbitMQ群集的最佳实践,rabbitmq,nservicebus,rabbitmq-exchange,Rabbitmq,Nservicebus,Rabbitmq Exchange,目前我们有2台负载平衡的web服务器。我们刚刚开始通过NSB公开一些功能。如果我创建两个应用服务器,我会在所有4个服务器之间创建一个集群吗?或者我应该创建两个集群 i、 e 群集1:Web服务器A、应用程序服务器A 群集2:Web服务器B、应用程序服务器B 如果它是一个集群,那么如果一个已发布的消息被部署到应用服务器a和B,那么如何防止该订阅服务器多次处理该消息 假设web服务器上没有运行任何应用程序服务,那么我将RabbitMQ放在web服务器上以实现消息持久性的唯一原因是什么?在这种情况下,

目前我们有2台负载平衡的web服务器。我们刚刚开始通过NSB公开一些功能。如果我创建两个应用服务器,我会在所有4个服务器之间创建一个集群吗?或者我应该创建两个集群

i、 e

群集1:Web服务器A、应用程序服务器A

群集2:Web服务器B、应用程序服务器B

如果它是一个集群,那么如果一个已发布的消息被部署到应用服务器a和B,那么如何防止该订阅服务器多次处理该消息

假设web服务器上没有运行任何应用程序服务,那么我将RabbitMQ放在web服务器上以实现消息持久性的唯一原因是什么?在这种情况下,我的假设是,我正在使用集群镜像将消息获取到应用服务器。这是否正确?

端点与服务器 NServiceBus使用端点的概念。端点与接收消息的队列相关。如果为了高可用性或性能而扩展此端点,那么您仍然有一个带有RabbitMQ的队列。因此,如果您想在服务器A和B上运行一个实例,它们都使用RabbitMQ从同一队列获取消息

我不会考虑应用程序内服务器,而是考虑端点及其在部署、可用性和性能方面的非功能性需求

可用性、性能和部署 不需要在服务器A和B上托管所有端点。您还可以在服务器A上运行服务X和Y,在服务器B上运行服务U和V。然后,您可以扩展性能,但不扩展可用性,但由于消息传递的异步性质,可用性已不再是一个问题。这可以使部署更容易

请求响应 如果同一逻辑端点部署了多个实例,那么哪个实例处理事件就不重要了。如果是,那么它可能不是发布订阅,而是异步请求/响应。这是由NServiceBus处理的,它使用RabbitMQ为每个实例创建一个队列,如果响应需要与请求实例的关联,则可以在该队列上接收响应

拓扑学 你有:

负载平衡web场群集 负载平衡RabbitMQ集群 NServiceBus端点 不同计算机上的高可用多个实例 在不同的机器上扩展端点甚至可以是每个端点的机器 两者的结合 基础设施
您可以选择在与web场相同的基础结构上运行RabbitMQ群集,也可以单独运行。这取决于您的需求和可用资源。如果web场和rabbit集群是分开的,那么您可以更轻松地独立扩展。

Ryan,我已经添加了一个答案,但您的问题不是很清楚。这些信息是否足以帮助您解决问题?