RabbitMQ集群w/.Net客户端

问题描述:

我已经阅读了很多文章和博客,但我仍然不确定如何正确地集群2个RabbitMQ节点。RabbitMQ集群w/.Net客户端

我读过的RabbitMQ集群指南:http://www.rabbitmq.com/clustering.html

我发现了关于API指南中一个神秘的群ID,对如何获取标识摆在首位没有解释:http://www.rabbitmq.com/releases/rabbitmq-dotnet-client/v2.4.1/rabbitmq-dotnet-client-2.4.1-api-guide.pdf

教训在那*帖子,基本上我需要我的客户端知道群集中的每个节点和故障转移场景代码:rabbitmq HA cluster

现在...我想要的行为是更透明一点如果可能的话。在那里我可能会使用客户端上的“ClusterId”来使消费者集群感知,然后希望库知道随机连接到任一节点来获取消息。

授予我知道消息一次只能在一台服务器上,所以我希望DotNet客户端库中的一些循环法术可以处理故障转移情况。

我还希望从发布者的角度来看,交换机会循环分发消息到集群中的各个节点。交换机也可以集群感知并处理故障转移情况。

现在基于我的阅读,它不像那样工作...除非我错过了一些东西。 如果我的知识是最新的,并且我必须编写所有可识别群集的业务,那么......为什么RabbitMQ首先具有群集功能?它是如何使用的?

有没有办法让RabbitMQ没有编码那么多的那种行为?

感谢

+1

我感到困惑的RabbitMQ集群。我现在对Erlang和RabbitMq有了更好的理解,以及为什么队列没有在集群中复制,以及这对于可伸缩性没有影响,这是我的主要目标。所有节点都知道每个队列的存在位置,并转发消息。因此,除非目标是高可用性,否则不需要复制相同的队列,但我不是这种情况。感谢您的帮助Troydm。 – Lancelot 2011-06-24 15:57:36

我使用HAProxy的故障切换和负载群集节点之间平衡的RabbitMQ的,也对异常.NET客户端,当节点出现故障时,您需要手动重新连接客户端。

这是两个节点群集的HAProxy配置,节点在15672和25672端口上运行。 客户端连接到5672端口。

global 
daemon 
log 127.0.0.1 alert 
log 127.0.0.1 alert debug 

defaults 
log global 
mode http 
option dontlognull 
option redispatch 
retries 3 
contimeout 5000 
clitimeout 50000 
srvtimeout 50000 

listen rabbitmq 0.0.0.0:5672 
    mode tcp 
    balance roundrobin 
    option tcpka 

server rabbit01 127.0.0.1:25672 check inter 5000 downinter 500 

server rabbit02 127.0.0.1:15672 check inter 5000 backup 

CUDOS到这个博客帖子http://www.joshdevins.net/2010/04/16/rabbitmq-ha-testing-with-haproxy/

+0

我已经按照你分享的链接。但该请求不是分布在两台服务器上。消息仅在一台服务器上发布。 – 2012-05-11 07:38:37

+0

我认为发布的消息不会被分发,只是用于故障转移,例如当一个主要经纪人失败的情况下,客户端将重新连接到第二个经纪人 – Troydm 2012-05-11 18:37:05

+0

我已经通过*发布了问题。检查这个http://*.com/questions/10547523/configure-haproxy-for-rabbitmq – 2012-05-12 04:02:13