目前我们有2个负载均衡的Web服务器。我们刚刚开始在NSB上公开一些功能。如果我创建两个“app”服务器,我会在所有4个服务器之间创建一个集群吗?或者我应该创建2个集群?
即
Cluster1:Web服务器A,应用服务器A
Cluster2:Web服务器B,App Server B
好像它是一个集群,如果该订阅服务器部署到应用服务器A和B,如何让发布的消息多次被同一逻辑用户处理呢?
我唯一的理由是将RabbitMQ放在Web服务器上以保持消息的持久性(假设我没有在Web服务器上运行任何应用程序服务)?在那种情况下,我的假设是我然后使用群集镜像将消息传递给应用服务器。这是对的吗?
答案 0 :(得分:0)
NServiceBus使用端点的概念。端点与其接收消息的队列相关。如果为高可用性或性能扩展此端点,那么您仍然有一个队列(使用RabbitMQ)。因此,如果您在服务器A和B上运行实例,则它们(使用RabbitMQ)从同一队列中获取其消息。
我不会在应用服务器中思考,而是考虑端点及其在部署,可用性和性能方面的非功能性要求。
不需要在服务器A和B上托管所有端点。您还可以在服务器A上运行服务X和Y,在服务器B上运行服务U和V.然后,您可以扩展性能但不是可用性,但可用性是由于消息传递的异步性质,已经不那么严重了。这可以使部署更容易。
如果相同的逻辑端点部署了多个实例,则哪个实例处理事件无关紧要。如果是,那么它可能不是pub sub而是异步请求/响应。这是由NServiceBus通过为每个实例(使用RabbitMQ)创建一个队列来处理的,如果该响应需要与请求实例具有亲缘关系,则可以接收响应。
你有:
您可以选择在与Web场相同的基础架构上运行RabbitMQ群集,也可以单独执行。这取决于您的要求和可用资源。如果Web场和兔群是分开的,那么您可以更容易地单独扩展。