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

歡迎訪問 生活随笔!

生活随笔

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

C#

使用 C# sdk 连接 高可用的 rabbitmq 镜像集群

發布時間:2023/12/4 C# 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用 C# sdk 连接 高可用的 rabbitmq 镜像集群 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們知道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};//第一步:創建connectionvar?connection?=?factory.CreateConnection(new?string[2]?{?"192.168.23.147",?"192.168.23.145"?});//第二步:創建一個channelvar?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 镜像集群的全部內容,希望文章能夠幫你解決所遇到的問題。

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