RabbitMq集群

RabbitMq集群,rabbitmq,easynetq,Rabbitmq,Easynetq,我是拉比犬的新手。我无法理解这里的概念。请找到场景 我有两台机器(RMQ1、RMQ2),在这两台正在运行的机器中我都安装了rabbitmq。我再次聚集RMQ2以加入RMQ1 cmd:/> rabbitmqctl join_cluster rabbit@RMQ1 如果您在此处看到机器的状态,则如下所示 在RMQ1中 c:/> rabbitmqctl cluster_status Cluster status of node rabbit@RMQ1... [{nodes

我是拉比犬的新手。我无法理解这里的概念。请找到场景

我有两台机器(RMQ1、RMQ2),在这两台正在运行的机器中我都安装了rabbitmq。我再次聚集RMQ2以加入RMQ1

cmd:/> rabbitmqctl join_cluster rabbit@RMQ1
如果您在此处看到机器的状态,则如下所示

在RMQ1中

c:/> rabbitmqctl cluster_status
    Cluster status of node rabbit@RMQ1...
    [{nodes,[{disc,[rabbit@RMQ1,rabbit@RMQ2]}]},
     {running_nodes,[rabbit@RMQ1,rabbit@RMQ2]}]
在RMQ2中

c:\> rabbitmqctl cluster_status
Cluster status of node rabbit@RMQ2 ...
[{nodes,[{disc,[rabbit@RMQ1,rabbit@RMQ2]}]},
 {running_nodes,[rabbit@RMQ1,rabbit@RMQ2]}]
为了发布和订阅消息,我正在连接到RMQ1。现在,每当我向RMQ1发送or消息时,我都会看到RMQ1和RMQ2中镜像的消息。这一点我很清楚,因为两个节点都在同一个集群中,所以它们在节点之间进行镜像

假设我关闭了RMQ2,我仍然看到消息被发布到RMQ1

但是当我关闭RMQ1时,我不能再发布消息了。由此我了解到RMQ1是主控的,RMQ2是从控的

现在,在不更改代码的情况下,我有以下问题:

  • 我如何让RMQ2承担接受消息的工作
  • 高可用队列的含义是什么
  • 实施此类场景的策略应该是什么
  • 请帮助

    问题2最好先回答,因为它会帮你解决很多问题

    高可用队列的含义是什么?

    这方面的一个很好的信息来源是。了解镜像(在Rabbit中实现高可用性的方法)和集群不是一回事,这一点非常重要。为了进行镜像,您需要创建一个集群,但是镜像不会仅仅因为您创建了一个集群就自动发生

    对兔子进行集群时,集群中的节点共享交换、绑定、权限和其他资源。这允许您将集群作为单个逻辑代理进行管理,并将其用于负载平衡等场景。但是,即使集群中的队列可以从集群中的任何计算机访问,每个队列及其消息实际上仍然仅位于声明队列的单个节点上

    这就是为什么在您的情况下,关闭RMQ1会使队列和消息不可用。如果您总是连接到该节点,那么这些队列就位于该节点。它们根本不存在于RMQ2上

    此外,即使RMQ2上有队列和消息,您也无法访问它们,除非您在检测到与RMQ1的连接已丢失后专门连接到RMQ2。Rabbit不会自动将您连接到群集中的某个幸存节点

    顺便说一句,如果您在RabbitMQ管理控制台中查看集群,您看到的可能会让您认为消息和队列已被复制。事实并非如此。您正在管理控制台中查看集群。因此,无论您在控制台中连接到哪个节点,都将看到集群范围的视图

    因此,有了这一背景,您现在知道了其他两个问题的答案:

    实施高可用性的策略应该是什么?/如何让RMQ2接受消息?

    根据您的描述,您正在寻找高可用性旨在提供的故障切换。您需要在集群上启用此功能。这是通过策略实现的,有多种方法可以实现,但最简单的方法是在策略部分的管理选项卡上的管理控制台中:

    详细介绍了在Rabbit中配置高可用性的含义

    这将为您提供跨集群的队列和消息镜像。这样,如果RMQ1失败,那么RMQ2仍然会有您的队列和消息,因为它们在两个节点上都是镜像的

    一个重要的注意事项是,Rabbit不会自动检测到与RMQ1的连接丢失,也不会将您连接到RMQ2。你的客户需要这样做。我看到你用
    EasyNetQ
    标记了你的问题。EasyNetQ为您提供这种“故障切换连接”类型的功能。您只需要在连接字符串中提供两个节点主机。报告有细节。请注意,EasyNetQ甚至还允许您在这种情况下注入一个简单的负载平衡策略。

    问题2最好先回答,因为它会为您解决很多问题

    高可用队列的含义是什么?

    这方面的一个很好的信息来源是。了解镜像(在Rabbit中实现高可用性的方法)和集群不是一回事,这一点非常重要。为了进行镜像,您需要创建一个集群,但是镜像不会仅仅因为您创建了一个集群就自动发生

    对兔子进行集群时,集群中的节点共享交换、绑定、权限和其他资源。这允许您将集群作为单个逻辑代理进行管理,并将其用于负载平衡等场景。但是,即使集群中的队列可以从集群中的任何计算机访问,每个队列及其消息实际上仍然仅位于声明队列的单个节点上

    这就是为什么在您的情况下,关闭RMQ1会使队列和消息不可用。如果您总是连接到该节点,那么这些队列就位于该节点。它们根本不存在于RMQ2上

    此外,即使RMQ2上有队列和消息,您也无法访问它们,除非您在检测到与RMQ1的连接已丢失后专门连接到RMQ2。Rabbit不会自动将您连接到群集中的某个幸存节点

    顺便说一句,如果您在RabbitMQ管理控制台中查看集群,您看到的可能会让您认为消息和队列已被复制。事实并非如此。您正在管理控制台中查看集群。因此,无论您在控制台中连接到哪个节点,都将看到集群范围的视图

    因此,有了这一背景,您现在知道了其他两个问题的答案:

    <