【问题标题】:RabbitMQ cluster w/ .Net client带 .Net 客户端的 RabbitMQ 集群
【发布时间】:2011-05-23 19:08:10
【问题描述】:

此时我已经阅读了许多帖子和博客,但我仍然不确定如何正确地集群我的 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 产生这种行为而无需编写那么多代码?

谢谢

【问题讨论】:

  • 我对 RabbitMq 集群感到困惑。我现在对 Erlang、RabbitMq 以及为什么队列没有在集群中复制以及这不会影响可伸缩性(这是我的主要目标)有了更好的理解。所有节点都知道每个队列所在的位置,并转发消息。因此,除非目标是高可用性,否则不需要复制相同的队列,而我的情况并非如此。感谢您对 Troydm 的帮助。

标签: .net cluster-computing rabbitmq


【解决方案1】:

我使用 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/

【讨论】:

  • 我已关注您分享的链接。但请求并未分布在两台服务器上。消息仅在一台服务器上发布。
  • 我不认为发布的消息会被分发,它只是用于故障转移,例如一个主broker失败的情况,客户端会重新连接第二个broker
  • 我已经在stackoverflow上发布了这个问题。检查这个stackoverflow.com/questions/10547523/…
猜你喜欢
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 2022-08-09
  • 2017-04-08
  • 1970-01-01
  • 2014-07-02
  • 2023-03-03
  • 1970-01-01
相关资源
最近更新 更多