使用NServiceBus

时间:2016-02-09 12:30:56

标签: rabbitmq cluster-computing load-balancing nservicebus high-availability

鉴于以下情况:

我有两台服务器,每台服务器都安装了RabbitMQ队列,它们组成了一个集群。我已使用镜像为HA队列配置它们。

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

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

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

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

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

此选项不起作用。

我也尝试过localhost,它适用于Node A,但不适用于Node B(具有slave队列)。

我应该定义什么作为主机使其工作(在服务,A和B两个)? Node B从主队列中出队消息需要什么?

可能有些事情我不明白但请帮助我。

2 个答案:

答案 0 :(得分:1)

您需要将localhost放在连接字符串中,如下所示:

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

然后它有效:)

答案 1 :(得分:0)

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

  

通常,不建议将节点主机名或IP地址烘焙到客户端应用程序中:这会引入不灵活性,并且如果群集的配置发生变化或者数量变化,则需要编辑,重新编译和重新部署客户端应用程序。集群中的节点发生变化。相反,我们建议采用更抽象的方法:这可能是一个动态DNS服务,它具有非常短的TTL配置,或普通的TCP负载均衡器,或通过心脏起搏器或类似技术实现的某种移动IP。

NServiceBus遵循以下建议:v.3x的RabbitMQ传输使设施在连接字符串中指定多个主机名,详细内容为here