用 .Net 客户端的 RabbitMQ 集群

3
我已经阅读了许多帖子和博客,但仍不确定如何正确地聚集我的2个RabbitMQ节点。
我阅读了RabbitMQ集群指南:http://www.rabbitmq.com/clustering.html 我在API指南中发现了一个神秘的ClusterId,但没有解释如何首先获取该ID:http://www.rabbitmq.com/releases/rabbitmq-dotnet-client/v2.4.1/rabbitmq-dotnet-client-2.4.1-api-guide.pdf 在StackOverflow的这篇文章中得知,基本上我需要让我的客户端知道集群中每个节点,并编写故障转移方案的代码:rabbitmq HA cluster 现在...我希望有一个更加透明的行为。如果可能的话,我会在客户端使用“ClusterId”来使消费者集群意识到,然后希望库知道随机连接任一节点以获取消息。
当然,我知道一条消息只能在一个服务器上,所以我希望DotNet客户端库可以进行一些轮询魔法,也可以处理故障转移情况。
从发布者的角度来看,我希望交换机可以将消息循环分发到集群中的各个节点。交换机也应该是集群感知的,并且可以优雅地处理故障转移情况。
根据我的阅读,它并不完全像那样...除非我错过了什么。
如果我的知识是最新的,并且我必须编写所有的集群感知业务,那么...为什么RabbitMQ首先有集群功能?它如何使用?
有没有一种方法可以在不编写那么多代码的情况下获得RabbitMQ的这种行为?
谢谢

1
我对RabbitMq集群感到困惑。现在我更好地理解了Erlang、RabbitMq以及队列为什么不会在集群中被复制,以及这如何不影响可扩展性,这是我的主要目标。所有节点都知道每个队列的位置,并转发消息。因此,除非目标是高可用性(这对我来说并不是这种情况),否则没有必要复制相同的队列。感谢Troydm的帮助。 - Lancelot
1个回答

5

我正在使用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

赞扬这篇博客文章http://www.joshdevins.net/2010/04/16/rabbitmq-ha-testing-with-haproxy/


我已经按照你分享的链接进行了操作,但是请求没有分布到两台服务器上,消息只发布在一台服务器上。 - Anand Soni
我认为发布的消息不会被分发,只是用于故障转移,例如当一个主代理失败时,客户端将重新连接到第二个代理。 - Troydm
我已经在stackoverflow上发布了这个问题。请查看http://stackoverflow.com/questions/10547523/configure-haproxy-for-rabbitmq - Anand Soni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接