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

摘要:
此设置表明,如果当前以mytest开头的队列是“镜像队列”,当然,它也可以通过代码实现,并且可以实现自动同步功能,如下所示:rabbitmqctlset_Policyha all“^mytest”‘{“ha mode”:“all”,“ha sync mode”:,这样他们才能真正着陆。我选择的司机是官方的。你可以在nuget上下载。接下来,我需要演示将数据推送到queue=mytest1。重点是我在CreateConnection方法中插入了多个IP地址。。。

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

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

centos1:192.168.23.147

centos2:192.168.23.145

截图如下:

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

一:cookie机制

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

一句话,如下图:

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

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

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

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

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

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

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

二:使用host映射erlang节点

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

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

三:rabbitmqctl cluster命令

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

搭建高可用的rabbitmq集群 + Mirror Queue + 使用C#驱动连接第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]# 

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

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

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

四:mirror queue

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

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

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

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

五:使用C#驱动连接

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

搭建高可用的rabbitmq集群 + Mirror Queue + 使用C#驱动连接第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     }

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

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

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

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

免责声明:文章转载自《搭建高可用的rabbitmq集群 + Mirror Queue + 使用C#驱动连接》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇OFBiz进阶之环境搭建(eclipse)RestTemplate请求使用方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

RabbitMQ、Kafka、RocketMQ的优劣势

今天我们一起来探讨:  全量的消息队列究竟有哪些?  Kafka、RocketMQ、RabbitMQ的优劣势比较  以及消息队列的选型 最全MQ消息队列有哪些 那么目前在业界有哪些比较知名的消息引擎呢?如下图所示 这里面几乎完全列举了当下比较知名的消息引擎,包括:  ZeroMQ  推特的Distributedlog  ActiveMQ:Apach...

一文带你了解 HTTP 黑科技

这是 HTTP 系列的第三篇文章,此篇文章为 HTTP 的进阶文章。 在前面两篇文章中我们讲述了 HTTP 的入门,HTTP 所有常用标头的概述,这篇文章我们来聊一下 HTTP 的一些 黑科技。 HTTP 内容协商 什么是内容协商 在 HTTP 中,内容协商是一种用于在同一 URL 上提供资源的不同表示形式的机制。内容协商机制是指客户端和服务器端就响应的资...

Jmeter 正则表达式提取Response Headers,Response Body里的值

实践过程中遇到需要提取Response Headers,Response Body里的值 一、获取Response Body的值,这里采用json提取器形式 1、Response Body返回值,如下图,要获取ticket的值 2、新建json提取器,获取ticket的值 下图新建json提取器步骤 上图参数: names of createdVar...

PreTranslateMessage作用和用法

PreTranslateMessage作用和用法 PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗体的消息都要通过这里,比較经常使用,当须要在MFC之前处理某些消息时,经常要在这里加入代码. MFC消息控制流最具特色的地方是CWnd类的虚拟函数PreTranslateMessage()...

Chrome浏览器Cookie解密

做过 web 开发的都知道:浏览器会把重要的认证登录认证信息存放到 cookie 中,在 cookie 有效期内,再次访问这个网站的时候就可以直接从 cookie 中获取到登录信息,这样就可以实现自动登录。但仅仅知道知道这些肯定不能满足很多人的旺盛的求知欲,那么我就 mac 系统下的 Chrome 浏览器 cookie 来做一次深入的讲解。 在mac操作系...

Django-REST-Framework JWT 实现SSO认证(下)

在上一篇博客中,我已经对JSON Web 认证做了简单的解释,这篇博客是续篇,若不了解,请看上一篇博客:https://www.cnblogs.com/yushenglin/p/10863184.html 一.安装djangorestframwork-jwt 二.用法 在你的settings.py,添加JSONWebTokenAuthentication...