鉴于以下情况:
我有两台服务器,每台服务器都安装了RabbitMQ队列,它们组成了一个集群。我已使用镜像为HA队列配置它们。
我们使用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从主队列中出队消息需要什么?
可能有些事情我不明白但请帮助我。
答案 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