日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

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

發布時間:2023/12/4 C# 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 搭建高可用的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@rabbitmq2Clustering 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地址。。。如下代碼:

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集群啦。。。

好了,本篇就說這么多了,希望對您有幫助

相關文章:

  • 體驗Rabbitmq強大的【優先級隊列】之輕松面對現實業務場景

  • RabbitMQ消息隊列應用


原文地址:http://www.cnblogs.com/huangxincheng/p/6113891.html


.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注


總結

以上是生活随笔為你收集整理的搭建高可用的rabbitmq集群 + Mirror Queue + 使用C#驱动连接的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。