0

配置RabbitMQ的集群考虑以下情形:与NServiceBus

我有两台服务器,他们每个人都有排队的RabbitMQ安装和它们形成一个集群。我已经使用镜像将它们配置为HA队列。

  • 节点A(具有主队列)
  • 节点B(具有从队列)

我们使用NServiceBus作为消息传递框架。我们有一个服务A(负载平衡的WCF服务),它应该将消息发布到RabbitMQ交换机和服务B(集群),这应该使消息出队并处理它们。问题是我应该如何在两个节点上配置NServicebus。我不能为的ConnectionString像这样指定单个主机名:

<connectionStrings> 
    <add name="NServiceBus/Transport" connectionString="host=nodeA, nodeB" /> 
</connectionStrings> 

这是因为该功能已经在当前NServiceBus版本中使用。这说得通。我也无法指定群集名称。

<connectionStrings> 
    <add name="NServiceBus/Transport" connectionString="host=clustername" /> 
</connectionStrings> 

此选项不起作用。

我也试过localhost,它适用于节点A,但不适用于节点B(它具有从队列)。

我应该定义为主机以使其工作(在两种服务A和B上)?节点B将主队列中的消息出队需要什么?

有可能是我不明白,但请帮助我。

回答

0

RabbitMQ docs提供有关从客户端连接到集群的建议:这不是RabbitMQ的问题,但您必须使用其他技术,如负载平衡器。

一般来说,这是不可取的节点的主机名或IP地址来烤到客户端应用程序:这引入了灵活性,并需要客户端应用程序进行编辑,重新编译和重新部署应在集群变化的配置或节点的数量在集群中发生变化。相反,我们推荐一种更抽象的方法:这可能是一个动态DNS服务,它具有非常短的TTL配置,或者一个普通的TCP负载均衡器,或者使用起搏器或类似技术实现的某种移动IP。

NServiceBus遵循以下建议:RabbitMQ的运输诉3.x的下降设施连接字符串详细here

1

你需要把本地主机在ConnectionString像这样指定多个主机名:

<connectionStrings> 
    <add name="NServiceBus/Transport" connectionString=" host=localhost" /> 
</connectionStrings> 

然后它工作:)