RabbitMq集群
我是拉比犬的新手。我无法理解这里的概念。请找到场景 我有两台机器(RMQ1、RMQ2),在这两台正在运行的机器中我都安装了rabbitmq。我再次聚集RMQ2以加入RMQ1RabbitMq集群,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
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是从控的
现在,在不更改代码的情况下,我有以下问题:
EasyNetQ
标记了你的问题。EasyNetQ为您提供这种“故障切换连接”类型的功能。您只需要在连接字符串中提供两个节点主机。报告有细节。请注意,EasyNetQ甚至还允许您在这种情况下注入一个简单的负载平衡策略。问题2最好先回答,因为它会为您解决很多问题
高可用队列的含义是什么?
这方面的一个很好的信息来源是。了解镜像(在Rabbit中实现高可用性的方法)和集群不是一回事,这一点非常重要。为了进行镜像,您需要创建一个集群,但是镜像不会仅仅因为您创建了一个集群就自动发生
对兔子进行集群时,集群中的节点共享交换、绑定、权限和其他资源。这允许您将集群作为单个逻辑代理进行管理,并将其用于负载平衡等场景。但是,即使集群中的队列可以从集群中的任何计算机访问,每个队列及其消息实际上仍然仅位于声明队列的单个节点上
这就是为什么在您的情况下,关闭RMQ1会使队列和消息不可用。如果您总是连接到该节点,那么这些队列就位于该节点。它们根本不存在于RMQ2上
此外,即使RMQ2上有队列和消息,您也无法访问它们,除非您在检测到与RMQ1的连接已丢失后专门连接到RMQ2。Rabbit不会自动将您连接到群集中的某个幸存节点
顺便说一句,如果您在RabbitMQ管理控制台中查看集群,您看到的可能会让您认为消息和队列已被复制。事实并非如此。您正在管理控制台中查看集群。因此,无论您在控制台中连接到哪个节点,都将看到集群范围的视图
因此,有了这一背景,您现在知道了其他两个问题的答案:
<