1. 程式人生 > >RabbitMQ叢集架構(HA)並結合.NET Core實操

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技術交流群: 歡迎加群