使用 C# sdk 连接 高可用的 rabbitmq 镜像集群
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用 C# sdk 连接 高可用的 rabbitmq 镜像集群,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3834字,纯文字阅读大概需要6分钟。
内容图文
我们知道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
那接下来我就去看看(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最后都需要用sdk连接,这样才能真正的落地,我选择的sdk是官方的,大家可以在nuget上面下载一下:
接下来我需要演示向 queue=mytest1队列中推送数据,亮点在于我在CreateConnection方法中塞入了多个ip地址。。。如下代码:
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();
????????}
????}
最后我们看一下webui,可以清清楚楚的看到消息已经进入了rabbitmq集群啦。。。
好了,本篇就说这么多了,希望对您有帮助~~~
内容总结
以上是互联网集市为您收集整理的使用 C# sdk 连接 高可用的 rabbitmq 镜像集群全部内容,希望文章能够帮你解决使用 C# sdk 连接 高可用的 rabbitmq 镜像集群所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。