搭建高可用的Rabbitmq集群 + Mirror Queue + 使用C#驱动连接

Posted DotNet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搭建高可用的Rabbitmq集群 + Mirror Queue + 使用C#驱动连接相关的知识,希望对你有一定的参考价值。


来源:一线码农

链接:cnblogs.com/huangxincheng/p/6113891.html


我们知道rabbitmq是一个专业的MQ产品,而且它也是一个严格遵守AMQP协议的玩意,但是要想骚,一定需要拿出高可用的东西出来,这不本篇就跟大家说

一下cluster的概念,rabbitmq是erlang写的一个成品,所以知道如何构建erlang的node集群就ok了,他需要一个统一的cookie机制。。。本篇的测试环境如下:


centos1:192.168.23.147


centos2:192.168.23.145


截图如下:


 

一:cookie机制


刚才也说了,要想实现cluster集群,必须保证各台机器上的cookie文件内容一致,那问题来了。。。cookie在哪呢?从rabbitmq的官网上可以找到这么

一句话,如下图:


搭建高可用的Rabbitmq集群 + Mirror Queue + 使用C#驱动连接


ok,官网说的非常清楚了,那接下来我们看一下$HOME变量指向的是哪里。。。


[root@rabbitmq1 Desktop]# echo $HOME

/root

[root@rabbitmq1 Desktop]# 


那接下来我就去看看(Centos1 .147)这台的/root 文件下可否能够找到,如下图:


搭建高可用的Rabbitmq集群 + Mirror Queue + 使用C#驱动连接

 

牛逼了吧,嘿嘿,现在我们要做的事情,就是把Centos2的cookie文件内容替换成Centos1的cookie内容。


搭建高可用的Rabbitmq集群 + Mirror Queue + 使用C#驱动连接

 

二:使用host映射erlang节点



搭建高可用的Rabbitmq集群 + Mirror Queue + 使用C#驱动连接


搭建高可用的Rabbitmq集群 + Mirror Queue + 使用C#驱动连接


三:rabbitmqctl cluster命令


好了,准备工作我们都做好了,大家可以重启一下机器,开启我们的rabbitmq,这时候会有惊喜发现的。。。


搭建高可用的Rabbitmq集群 + Mirror Queue + 使用C#驱动连接


由原来的localhost改成现在的rabbitmq2了,看到了吧~~~ 接下来大家可以把两台rabbitmq开启了。

 

1. 在centos1上使用rabbitmqctl cluster_status看看集群现在的状况


[root@rabbitmq1 Desktop]# rabbitmqctl cluster_status

Cluster status of node rabbit@rabbitmq1 ...

[{nodes,[{disc,[rabbit@rabbitmq1]}]},

 {running_nodes,[rabbit@rabbitmq1]},

 {cluster_name,<<"rabbit@rabbitmq1">>},

 {partitions,[]},

 {alarms,[{rabbit@rabbitmq1,[]}]}]

[root@rabbitmq1 Desktop]#


可以看到,当前的running-nodes中只有一台,刚好就是本机的erlang节点本身,接下来我们看一下是否能够连接到rabbit@rabbitmq2上去。。。


2. join_cluster命令


这个命令之前,需要将本机的rabbitmq关闭,然后进行join操作,从下图中可以看到,我们已经连接到了centos2上的rabbitmq了。。。


[root@rabbitmq1 Desktop]# rabbitmqctl stop_app

Stopping node rabbit@rabbitmq1 ...

[root@rabbitmq1 Desktop]#  rabbitmqctl join_cluster rabbit@rabbitmq2

Clustering node rabbit@rabbitmq1 with rabbit@rabbitmq2 ...

[root@rabbitmq1 Desktop]# rabbitmqctl start_app

Starting node rabbit@rabbitmq1 ...

[root@rabbitmq1 Desktop]#


3. 使用webui看一下最后的效果


搭建高可用的Rabbitmq集群 + Mirror Queue + 使用C#驱动连接


看到没有,现在我们的rabbitmq集群已经搭建成功了,如果你有更多的机器,都可以使用这个join命令加入吧,很简单吧~~~

 

四:mirror queue


从名字上可以看出,就是镜像队列的意思,也就是说queue能在我们多台机器中同步,设置的方式也能简单,只需要在webui的policy上面设置即可。。。


搭建高可用的Rabbitmq集群 + Mirror Queue + 使用C#驱动连接


这段设置表示当前如果是mytest开头的队列都是“镜像队列”,当然也可以用代码来实现,并且实现自动同步的功能,如下:


rabbitmqctl set_policy ha-all "^mytest" '{"ha-mode":"all","ha-sync-mode":"automatic"}'


五:使用C#驱动连接


再好的cluster最后都需要用语言驱动连接,这样才能真正的落地,我选择的驱动是官方的,大家可以在nuget上面下载一下:


搭建高可用的Rabbitmq集群 + Mirror Queue + 使用C#驱动连接

 


class Program

{

        static void Main(string[] args)

        {

            ConnectionFactory factory = new ConnectionFactory()

            {

                UserName = "datamip",

                Password = "datamip",

                AutomaticRecoveryEnabled = true,

                TopologyRecoveryEnabled = true

            };

//第一步:创建connection 

var connection = factory.CreateConnection(new string[2] { "192.168.23.147", "192.168.23.145" });

//第二步:创建一个channel

var channel = connection.CreateModel();

var result = channel.QueueDeclare("mytest1", true, false, false, null);

for (int i = 0; i < int.MaxValue; i++)

{

channel.BasicPublish(string.Empty, "mytest1", null, new byte[10]);

Console.WriteLine("{0} 推送成功", i);

Thread.Sleep(1000);

}

Console.Read();

}

}


搭建高可用的Rabbitmq集群 + Mirror Queue + 使用C#驱动连接


最后我们看一下webui,可以清清楚楚的看到消息已经进入了rabbitmq集群啦。。。



好了,本篇就说这么多了,希望对您有帮助~~~


关注「DotNet」 

看更多精选 .Net 技术文章

↓↓↓

以上是关于搭建高可用的Rabbitmq集群 + Mirror Queue + 使用C#驱动连接的主要内容,如果未能解决你的问题,请参考以下文章

手把手教你搭建高可用 RocketMQ 集群!

搭建高可用mongodb集群(转)

搭建高可用mongodb集群—— 分片

搭建高可用mongodb集群—— 副本集

Windows 2012 系统搭建高可用故障转移集群

搭建高可用mongodb集群—— 深入副本集内部机制