一、前言
已經一年沒有更新博客了,由於公司事務比較多,並且樓主我也積極在公司項目中不斷實踐.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 歡迎加群交流
如果您認為這篇文章還不錯或者有所收獲,您可以點擊右下角的【推薦】按鈕精神支持,因為這種支持是我繼續寫作,分享的最大動力!
微信公眾號:歡迎關注 QQ技術交流群: 歡迎加群