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

我们知道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的官网上可以找到这么

一句话,如下图:

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

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

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

牛逼了吧,嘿嘿,现在我们要做的事情,就是把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集群啦。。。

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

 
分类: rabbitmq

rabbitmq集群 + Mirror Queue + 使用C#的更多相关文章

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

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

  2. Rabbitmq集群高可用测试

    Rabbitmq集群高可用 RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言,但其本身并不支持负载均衡. Rabbit模式大概分为以下三种:单一模式.普通模 ...

  3. Rabbitmq集群

    分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 Rabbitmq集群高 ...

  4. Rabbitmq集群高可用

    转载:https://www.cnblogs.com/flat_peach/archive/2013/04/07/3004008.html RabbitMQ是用erlang开发的,集群非常方便,因为e ...

  5. rabbitmq集群安装与配置(故障恢复)

    0.首先按照http://www.cnblogs.com/zhjh256/p/5922562.html在至少两个节点安装好(不建议单机,没什么意义) 1.先了解rabbitmq集群架构,http:// ...

  6. 高可用rabbitmq集群服务部署步骤

    消息队列是非常基础的关键服务,为保证公司队列服务的高可用及负载均衡,现通过如下方式实现: RabbitMQ Cluster + Queue HA + Haproxy + Keepalived 3台ra ...

  7. 消息型中间件之RabbitMQ集群

    在上一篇博客中我们简单的介绍了下rabbitmq简介,安装配置相关指令的说明以及rabbitmqctl的相关子命令的说明:回顾请参考https://www.cnblogs.com/qiuhom-187 ...

  8. rabbitmq集群和镜像队列

    Rabbitmq集群和镜像队列 1引言 1.1编写目的 2 原理和使用 2.1镜像队列原理 2.1.1 原理 默认的一个rabbitmq中的queue是在一个node上的,至于在那个node上取决于c ...

  9. RabbitMQ集群、镜像部署配置

    1   RABBITMQ简介及安装 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python.Ruby..NET.Java.JMS.C.PHP.Act ...

随机推荐

  1. Vertx简介

    今天看了一篇很不错的关于Vertx的简介,转载下. 原文链接:http://www.csdn.net/article/2015-12-21/2826533?utm_source=tuicool& ...

  2. swift项目第四天:动态加载控制器

    一:Appdelegate import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate ...

  3. 如何知道刚刚插入数据库那条数据的id

    如何知道刚刚插入数据库那条数据的id 一.总结 一句话总结:这些常见功能各个框架里面都有,可以查看手册,thinkphp里面是$userId = Db::name('user')->getLas ...

  4. 【计算机】基本概念的理解 —— 沙盒(sandbox)、交互式计算/编程/应用

    web scraper:网络铲: scraper:n. 刮刀:铲土机:守财奴: 1. 交互式计算/编程/应用(interactive computing/application/programming ...

  5. CSS边框作图

    原文 简书原文:https://www.jianshu.com/p/537a878304f2 大纲 1.border-style的值 2.利用border作图——基本图形 3.利用border作图—— ...

  6. Jedis 源代码阅读一 —— Jedis

    这是jedis 源代码文件夹,我们接下来选择性阅读重要的接口以及实现. └─redis └─clients ├─jedis │ │ BinaryClient.java │ │ BinaryJedis. ...

  7. python implementation for Qt's QDataStream(看一下QDataStream的结构)

    #!/usr/bin/env python # -*- coding: utf- -*- from __future__ import print_function from __future__ i ...

  8. Java fork join ForkJoinPool 用法例子

    本例是把一个大的数组求和的计算的大任务分解到在小范围内求和的小任务,然后把这些小任务之和加起来就是所求之结果. 技术:JDK8.0, Javafork-join模式下的RecursiveTask技术, ...

  9. Windows环境搭建Web自己主动化測试框架Watir(基于Ruby)

    web自己主动化測试一直是一个比較迫切的问题 图1-1 须要安装的工具 http://railsinstaller.org/ 由于安装Ruby还须要用到其它的一些开发工具集.所以建议从站点http:/ ...

  10. IE浏览器下css hack

    \9    :所有IE浏览器都支持 _和-  :仅IE6支持 *     :IE6.IE7支持 \0    :IE8.IE9支持 \9\0  :IE8部分支持.IE9支持 \0\9  :IE8.IE9 ...