使用NServiceBus配置RabbitMQ群集

使用NServiceBus配置RabbitMQ群集,rabbitmq,cluster-computing,load-balancing,nservicebus,high-availability,Rabbitmq,Cluster Computing,Load Balancing,Nservicebus,High Availability,鉴于以下情况: 我有两个服务器,每个服务器都安装了RabbitMQ队列,它们构成了一个集群。我已经使用镜像为HA队列配置了它们 节点A(具有主队列) 节点B(具有从属队列) 我们使用NServiceBus作为消息传递框架。我们有一个服务a(负载平衡WCF服务),它应该将消息发布到RabbitMQ exchange,还有一个服务B(集群),它应该将消息出列并处理它们。问题是如何在两个节点上配置NServicebus。我无法为如下连接字符串指定单个主机名: 这是因为该功能在当前的NServi

鉴于以下情况:

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

  • 节点A(具有主队列)
  • 节点B(具有从属队列)
我们使用NServiceBus作为消息传递框架。我们有一个服务a(负载平衡WCF服务),它应该将消息发布到RabbitMQ exchange,还有一个服务B(集群),它应该将消息出列并处理它们。问题是如何在两个节点上配置NServicebus。我无法为如下连接字符串指定单个主机名:


这是因为该功能在当前的NServiceBus版本中已被弃用。这是有道理的。我也不能指定群集名称


此选项不起作用

我还尝试了localhost,它适用于节点A,但不适用于节点B(具有从属队列)

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

可能有些事情我不明白,但请帮我解决。

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

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

NServiceBus遵循这一建议:RabbitMQ transport的v3.x删除了在连接字符串中指定多个主机名的功能,如所述。

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

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


NServiceBus遵循这一建议:RabbitMQ transport的v3.x删除了在连接字符串中指定多个主机名的功能,详情如下

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



然后它就可以工作了:)

您需要将localhost放在connectionstring中,如下所示:


然后它就起作用了:)