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

  我们领略rabbitmq是一个标准的MQ产品,而且它也是一个冷酷遵守AMQP协议的东西,不过要想骚,一定要求拿出高可用的东西出来,那不本篇就跟咱们说

一晃儿cluster的定义,rabbitmq是erlang写的一个产品,所以知道什么样创设erlang的node集群就ok了,他须求一个集合的cookie机制。。。本篇的测试环境如下:

centos1:192.168.23.147

centos2:192.168.23.145

截图如下:

图片 1

 

一:cookie机制

     
刚才也说了,要想达成cluster集群,必须保险各台机器上的cookie文件内容相同,那难题来了。。。cookie在哪吧?从rabbitmq的官网上可以找到那样

一句话,如下图:

图片 2

ok,官网说的万分精晓了,那接下去大家看一下$HOME变量指向的是哪里。。。

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

 

那接下去自个儿就去探望(Centos1 .147)那台的/root
文件下能不能能够找到,如下图:

图片 3

 

牛逼了吗,嘿嘿,将来大家要做的事情,就是把Centos2的cookie文件内容替换成Centos1的cookie内容。

图片 4

 

二:使用host映射erlang节点

 
 将来cookie值是如出一辙的了,然后要求在/etc/hosts中加进一下host影射,方便erlang节点之间相互发现,接下去就是在2台centos上加码同样的host地址:

图片 5图片 6

 

三:rabbitmqctl cluster命令

   
好了,准备干活大家都搞好了,大家可以重启一下机械,开启大家的rabbitmq,这时候会有悲喜发现的。。。

图片 7

由原本的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]# 

 

  1. 利用webui看一下尾声的功能

图片 8

看看没有,以后大家的rabbitmq集群已经搭建成功了,如果您有更多的机器,都可以利用那些join命令出席吧,很简短吗~~~

 

四:mirror queue

   
从名字上可以看到,就是镜像队列的情趣,相当于说queue能在大家多台机器中一块,设置的办法也能大致,只须求在webui的policy下面安装即可。。。

图片 9

这段设置表示近期一旦是mytest起初的行列都以“镜像队列”,当然也得以用代码来贯彻,并且落成全自动同步的职能,如下:

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

 

五:使用C#使得连接

  再好的cluster最终都急需用语言驱动连接,那样才能真的的诞生,作者选拔的驱动是官方的,我们可以在nuget下面下载一下:

图片 10

 

接下去本身索要演示向
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     }

 

图片 11

 

末段大家看一下webui,可以清晰的收看音信已经进来了rabbitmq集群啦。。。

图片 12

好了,本篇就说这样多了,希望对你有帮带~~~

 

相关文章