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

  咱们知道rabbitmq是一个专业的MQ产品,并且它也是一个严格遵照AMQP协议的玩意,可是要想骚,必定须要拿出高可用的东西出来,这不本篇就跟你们说node

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

centos1:192.168.23.147centos

centos2:192.168.23.145cookie

截图以下:app

 

一:cookie机制测试

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

一句话,以下图:spa

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

[root@rabbitmq1 Desktop]# echo $HOME
/root
[root@rabbitmq1 Desktop]# 

 

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

 

牛逼了吧,嘿嘿,如今咱们要作的事情,就是把Centos2的cookie文件内容替换成Centos1的cookie内容。

 

二:使用host映射erlang节点

   如今cookie值是同样的了,而后须要在/etc/hosts中追加一下host影射,方便erlang节点之间相互发现,接下来就是在2台centos上追加一样的host地址:

 

三:rabbitmqctl cluster命令

    好了,准备工做咱们都作好了,你们能够重启一下机器,开启咱们的rabbitmq,这时候会有惊喜发现的。。。

由原来的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集群已经搭建成功了,若是你有更多的机器,均可以使用这个join命令加入吧,很简单吧~~~

 

四:mirror queue

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

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

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

 

五:使用C#驱动链接

  再好的cluster最后都须要用语言驱动链接,这样才能真正的落地,我选择的驱动是官方的,你们能够在nuget上面下载一下:

 

接下来我须要演示向 queue=mytest1队列中推送数据,亮点在于我在CreateConnection方法中塞入了多个ip地址。。。以下代码:

 1     class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             ConnectionFactory factory = new ConnectionFactory()
 6             {
 7                 UserName = "datamip",
 8                 Password = "datamip",
 9                 AutomaticRecoveryEnabled = true,
10                 TopologyRecoveryEnabled = true
11             };
12 
13             //第一步:建立connection 
14             var connection = factory.CreateConnection(new string[2] { "192.168.23.147", "192.168.23.145" });
15 
16             //第二步:建立一个channel
17             var channel = connection.CreateModel();
18 
19             var result = channel.QueueDeclare("mytest1", true, false, false, null);
20 
21             for (int i = 0; i < int.MaxValue; i++)
22             {
23                 channel.BasicPublish(string.Empty, "mytest1", null, new byte[10]);
24 
25                 Console.WriteLine("{0} 推送成功", i);
26                 Thread.Sleep(1000);
27             }
28 
29             Console.Read();
30         }
31     }

 

 

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

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

相关文章
相关标签/搜索