当前位置: 首页 > 知识库问答 >
问题:

RabbitMQ多个集群上的镜像队列

陈修诚
2023-03-14

可以通过多个RabbitMQ集群使用RabbitMQ HA吗?

这是我的要求:

我们有2个RabbitMQ集群(每个集群有4个节点)。两个集群中的所有节点都将使用相同的Erlang cookie。因此,尽管这两个群集在物理上位于不同的位置,但将作为一个包含8个节点的群集。

我们计划使用HAProxy来负载平衡两个集群(8个节点)。发布者和消费者都将使用此代理连接到代理。

我们希望为HA使用镜像队列,HA模式为:确切地说,HA参数为:4,HA同步模式为:automatic,以及用于cluster_partition_handling的auto heal。

问题:

>

  • 在HA的情况下,我们是否可以指定使用来自第一个集群的2个节点和来自第二个集群的2个节点。据我所知,这可以通过策略ha模式完成:节点并使用节点名称,但这样它将始终使用相同的节点,这种设置可以是动态的吗?

    由于这两个集群都非常可靠,使用自动修复cluster_partition_handling(在大脑分裂的情况下)是正确的方法吗?

    根据这一点,“默认情况下,RabbitMQ集群中的队列位于单个节点(首次声明它们的节点)上。这与交换和绑定形成了对比,后者始终可以被视为位于所有节点上。”。这是否意味着默认情况下镜像交换?因此,当一条消息到达一个交换机并且该节点停机时,该消息在另一个节点上的另一个交换机上可用吗?

  • 共有1个答案

    楚翰
    2023-03-14

    RabbitMQ团队监控此邮件列表,并且仅有时在StackOverflow上回答问题。

    因此,即使这两个集群在物理上位于不同的位置,但将充当具有8个节点的单个集群。

    请不要这样做。RabbitMQ集群需要低延迟的可靠网络连接。如果您的集群跨越WAN或可用性区域,那么您拥有网络分区的机会就会大大增加。有关更多信息,请参见文档的这一部分。你应该使用铲或联盟功能。

    这是否意味着默认情况下交换是镜像的?因此,当消息到达交换并且该节点出现故障时,该消息是否可以在另一个节点上的另一个交换上使用?

    是的,是的。

     类似资料:
    • 我是新手RabbitMQ java客户端。我的问题:我创建了10个consumer并将它们添加到队列中。每个消费者使用10秒来处理我的流程。我检查了Rabbit的页面,我看到我的队列有4000条消息没有发送到客户端。我检查了日志客户端,结果是为一个消费者获取一条消息,10秒后,我为一个消费者获取一条消息,依此类推…我想要得到10个消息为所有消费者在当时(10个消息-10消费者过程在当时)请帮助我,

    • 拜托,我需要你的帮助。 自上周以来,我一直在努力尝试在Windows服务器上配置兔子MQ集群。我重新安装了 RabbitMQ 3.7.8 和 ErlangOTP 21-1 超过 15 次,试图找出问题并修复它,但不幸的是,我所有的尝试都失败了。 我的环境: 三个虚拟机与操作系统: Windows 服务器 2012 环境变量设置: 安装步骤:(针对每台服务器) 完成以上服务器的安装后,我开始配置集群

    • 你为什么要这么做?我理解增加消息的持久性(如果一个节点关闭,其他队列仍然获得消息)。但是性能呢?集群如何提高性能。难道所有的消费者/生产者都不会连接到主节点的队列吗?如果是这样,我们不是仍然在单个节点上获得流量吗?我们是否设置了负载均衡器,使得流量每次都指向不同的节点? RabbitMQ集群如何提高性能?

    • 我目前正在尝试使用RabbitMQ(具有出色的RabbitMQBundle)来处理大量的异步工作。 目标是让一个队列发布相同类型的消息,并让多个服务器上的X个工作者在同一时间内查看消息。 每个工人都要偷看一条消息,完成工作,然后偷看另一条消息,等等。 这里是我的conf: 在我的consumer中,我有一个日志文件中的条目和120秒的睡眠。 我启动了php app/console rabbitmq

    • 对于一个幼稚的开发人员来说,他们似乎可以发布到集群中的任何节点,并从这些节点消费,这会给他们一种高可用性的错误感觉。 如果承载队列的节点死亡,使用者将不再能够从另一个节点到达队列。 是否有一种方法可以禁用这种行为,这样就可以很明显地看到,您要么必须有一个镜像队列,要么需要在每台服务器上创建一个不同的队列,从这两个服务器中使用,然后处理重复的队列。 谢谢

    • 我目前正在学习一些关于RabbitMQ+SpringAMQ的知识,我试图使我的SimpleMessageListenerContainer能够读取传递到我的两个队列的消息,但只有一个队列在接收消息。如果你有任何关于代码的进一步提示,或者如果有任何方法可以更好地做它,请让我知道这将是很好的。 编辑:问题是代码没有将消息发送给两个队列,只发送给一个队列。 基本上我是从两个队列接收的,一个在数据库中插入