RabbitMQ集群架構(HA)並結合.NET Core實操

一、前言


  已經一年沒有更新部落格了,由於公司事務比較多,並且樓主我也積極在公司項目中不斷實踐.net core、DDD以及Abp vnext,也積累了一些吐血經驗,目前我在做一家在線教育公司負責智慧校園業務,所涉及到的數據一天達上百萬,並且還需要對這些並發數據進行解析轉化,在此次的過程中也涉及到了使用RabbitMQ進行業務的解耦和流量削峰來應對如此大量的請求;過程是痛苦的,但結果是美好的。

說到MQ,大家應該都聽過,像RabbitMQ,Kfaka,Activemq,rocketmq等,消息隊列是一種跨進程的通訊機制,主要用於上下游之間傳遞消息的,主要給我們解決了“應用解耦”、“流量削峰”、“非同步通訊”等,下圖是針對MQ的對比圖,如果不完善的地方請海涵:

 

二、RabbitMQ說明


1、在這麼多的MQ中,我為什麼選擇使用RabbitMQ呢?其實最主要的原因是它是部署最廣泛的開源消息代理,有成千上萬的用戶,社區支援性非常好,支援許多作業系統和雲環境上運行,也支援多種消息傳遞協議,關鍵還是部署簡單,在高並發、高可用中有成熟的方案,詳情見官方文檔:RabbitMQ

 2、在針對RabbitMQ集群架構方案中,有四種架構模式,主備模式、鏡像模式、遠程模式、多活模式,每種架構都可以算很實用,在企業中“鏡像模式”也是用的最多的,最普遍的。

 

3、RabbitMQ 六種工作模式

點對點模式(一對一)、工作隊列模式、發布訂閱模式、路由模式、topics以及RPC模式,下面分別來介紹一下這幾種:

 

 A、點對點模式(一對一):主要就是一個生產者對應一個消費者;

B、工作隊列模式:即一對多,一個生產者產生的數據可以被多個消費者消費,但各個消費者獲取的數據是不一致的,應該消息都是經過一個隊列中獲取的;

C、發布訂閱模式:引入了交換機exchange,生產者產生的數據發布到exchange中,exchange分發到不同的隊列中,每一個隊列裡面的數據都是一模一樣的,給多個消費者消費;

D、routing模式:在pub/sub的基礎上引入了routingkey的概念,即exchange會按照routingkey把消息分發到不同的隊列中,給不同的消費者使用;

E、topics模式:在routing模式的基礎上對routingkey 加入了  *  和 #  的概念,*  代表 單字元串匹配,#  代表 多字元串匹配,如 key為 beijing.chaoyang.20200312 =>  *.*.*.20200312 或者 #.20200312 ;

F、RPC模式:針對生產者產生的數據,消費者消費後會給生產者一個回饋,即遠程過程調用。

三、RabbitMQ集群架構搭建


1、在做集群搭建的時候我都有一種習慣,就是習慣了先畫圖,規劃處環境,然後才開始部署,如下圖,整個集群的構建

 

主要分為兩部分內容:haproxy 集群高可用以及 RabbitMQ集群

A、在haproxy集群架構中主要涉及到haproxy的負載均衡和引入keepalived的VIP實現故障轉移和健康檢查

B、RabbitMQ集群採用鏡像模式來實現數據的同步,由於數據是直接存在mq伺服器中,因此為了保證高可靠,則需要搭建3台奇數節點。

 

2、針對於環境規劃圖

 

由於我是本地部署,因此我採用的是本地虛擬機,5台,如果大家電腦配置不是很好,可以起3台虛擬機跑測試即可。

在 rabbitmq安裝中需要安裝erlang運行環境

大家可以在elang官網以及rabbitmq官網中下載即可

elang官網:https://www.erlang-solutions.com/

rabbitmq官網:https://www.rabbitmq.com/download.html

 

3、安裝完畢後,就可以看到我們的3個節點

 

 4、目前為止給大家介紹了集群架構圖,如果大家想繼續深入,可以去看我錄製的影片,大家多多支援(掃描二維碼,有驚喜)

在此次特殊時期也錄製了一期技術課程,只為給大家在升職加薪的道路上提供一份幫助,大家多多關照,如果針對技術影片有bug的,歡迎大家批評指正。

如果有不懂的,可以加下面的QQ群,歡迎諮詢

 

asp.net core 交流群:787464275 歡迎加群交流
如果您認為這篇文章還不錯或者有所收穫,您可以點擊右下角的【推薦】按鈕精神支援,因為這種支援是我繼續寫作,分享的最大動力!

作者:LouieGuo
聲明:原創部落格請在轉載時保留原文鏈接或者在文章開頭加上本人部落格地址,如發現錯誤,歡迎批評指正。凡是轉載於本人的文章,不能設置打賞功能,如有特殊需求請與本人聯繫!

微信公眾號:歡迎關注                                                 QQ技術交流群: 歡迎加群