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

时间:2015-05-29 12:16:50

标签: rabbitmq nservicebus rabbitmq-exchange

目前我们有2个负载均衡的Web服务器。我们刚刚开始在NSB上公开一些功能。如果我创建两个“app”服务器,我会在所有4个服务器之间创建一个集群吗?或者我应该创建2个集群?

Cluster1:Web服务器A,应用服务器A

Cluster2:Web服务器B,App Server B

好像它是一个集群,如果该订阅服务器部署到应用服务器A和B,如何让发布的消息多次被同一逻辑用户处理呢?

我唯一的理由是将RabbitMQ放在Web服务器上以保持消息的持久性(假设我没有在Web服务器上运行任何应用程序服务)?在那种情况下,我的假设是我然后使用群集镜像将消息传递给应用服务器。这是对的吗?

1 个答案:

答案 0 :(得分:0)

端点与服务器

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

我不会在应用服务器中思考,而是考虑端点及其在部署,可用性和性能方面的非功能性要求。

可用性与性能与部署

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

Pubsub与请求响应

如果相同的逻辑端点部署了多个实例,则哪个实例处理事件无关紧要。如果是,那么它可能不是pub sub而是异步请求/响应。这是由NServiceBus通过为每个实例(使用RabbitMQ)创建一个队列来处理的,如果该响应需要与请求实例具有亲缘关系,则可以接收响应。

拓扑

你有:

  • 负载均衡的Web场群集
  • 负载均衡RabbitMQ群集
  • NServiceBus端点
    • 不同计算机上的高可用多个实例
    • 在各种计算机上传播端点(甚至可以是每个端点的计算机)
    • 两者的结合

基础设施

您可以选择在与Web场相同的基础架构上运行RabbitMQ群集,也可以单独执行。这取决于您的要求和可用资源。如果Web场和兔群是分开的,那么您可以更容易地单独扩展。