訊息中介軟體RabbitMQ

2021-10-09 20:29:18 字數 2520 閱讀 5294

1.1.為什麼使用訊息佇列、應用場景、常見的訊息中介軟體有?

用於實現分布式系統模組與模組之間的訊息通訊。

原理:原理就是生產者生產訊息,把訊息傳送給activemq。activemq接收到訊息,然後檢視有多少個消費者,然後把訊息**給消費者,此過程中生產者無需參與。消費者接收到訊息後做相應的處理和生產者沒有任何關係。

主要作用:****應用解耦********、********非同步處理、流量削鋒********、********訊息通訊****

應用場景:

1、使用者註冊的時候,重點內容是將使用者資訊儲存到資料庫中,發簡訊驗證或者是發郵件增加了業務的複雜度。這時使用mq將發簡訊、發郵件通知mq由另外的服務平台完成。

2、搜尋平台、快取平台

查詢資料,建立快取,不從資料庫查詢,從快取查詢,當資料庫發生增加、修改、刪除操作時發訊息給mq,快取平台從mq獲取到這個訊息,更新快取。

activemq使用的是標準的生產者(完成生產訊息並傳送訊息)和消費者(獲取訊息,完成自己的業務邏輯)模型

常見訊息中介軟體:

activemq、rabbitmq、rocketmq、kafka

1.2.使用了訊息佇列會有什麼缺點

*·*****系統可用性降低:****系統引入的外部依賴越多,越容易掛掉,本來其他系統只要執行好好的,那你的系統就是正常的。現在你非要加入個訊息佇列進去,那訊息佇列掛了,你的系統不是呵呵了。因此,系統可用性會降低

*·*****系統複雜性增加:****加入了訊息佇列,要多考慮很多方面的問題,比如:一致性問題、如何保證訊息不被重複消費、如何保證訊息可靠性傳輸等。

1.3.activemq傳遞訊息的兩種方式

****點對點********模********式****(ptp):乙個消費者對應乙個生產者。預設訊息持久化。

****發布/訂閱模式****(publish/sub):乙個生產者產生訊息傳送後,可以被多個消費者進行接收。

*兩種傳遞訊息的方式的異同********:*

相同點:實現步驟基本一樣,大同小異

不同點:

點對點模式:預設訊息持久化,訊息的生產者傳送以後,訊息會持久化在activemq的服務端,直到有消費者消費。

1.4.activemq如果訊息傳送失敗怎麼辦

如果是點對點模式,如果訊息傳送不成功,訊息預設儲存到activemq服務端,直到有消費者消費,所以訊息是不會丟失的。

如果是發布/訂閱模式,預設情況下只通知一次,如果接不到訊息就沒有了。如果要求訊息必須送達不可丟失,可以配置持久訂閱,為每個訂閱端定義乙個id,在訂閱時向activemq註冊,發布訊息和接收訊息時配置傳送模式為持久化。這樣,如果客戶端接收不到訊息,訊息會持久化到服務端,直到客戶端正常接收為止。

1.5.如何防止訊息重**送?

****增加訊息狀態表****,用來記錄訊息的處理狀態,每次處理訊息之前,都去狀態表中查詢一次,如果已經有相同的訊息存在,就不處理,可以防止訊息的重**送。

*分布式********快取*

24.1.1. 快取雪崩

快取雪崩我們可以簡單的理解為:由於原有快取失效,新快取未到期間所有原本應該訪問快取的請求都去查詢資料庫了,而對資料庫 cpu 和記憶體造成巨大壓力,嚴重的會造成資料庫宕機。從而形成一系列連鎖反應,造成整個系統崩潰。一般有三種處理辦法:

\1. 一般併發量不是特別多的時候,使用最多的解決方案是****加鎖排隊****。

\2. 給每乙個快取資料增加相應的****快取標記****,記錄快取的是否失效,如果快取標記失效,則更新資料快取。

\3. 為 key 設定****不同的快取失效時間****。

24.1.2. 快取穿透

快取穿透是指使用者查詢資料,在資料庫沒有,自然在快取中也不會有。這樣就導致使用者查詢的時候,在快取中找不到,每次都要去資料庫再查詢一遍,然後返回空(相當於進行了兩次無用的查詢)。這樣請求就繞過快取直接查資料庫,這也是經常提的快取命中率問題。

有很多種方法可以有效地解決快取穿透問題,最常見的則是採用****布隆過濾器****,將所有可能存在的資料雜湊到乙個足夠大的 bitmap 中,乙個一定不存在的資料會被這個 bitmap 攔截掉,從而避免了對底層儲存系統的查詢壓力。另外也有乙個更為簡單粗暴的方法,如果乙個查詢返回的資料為空(不管是資料不存在,還是系統故障),我們仍然把這個空結果進行快取,但它的過期時間會很短,最長不超過五分鐘。

通過這個直接設定的預設值存放到快取,這樣第二次到緩衝中獲取就有值了,而不會繼續訪問資料庫。

24.1.3. 快取預熱

快取預熱就是系統上線後,將相關的快取資料直接載入到快取系統。這樣就可以避免在使用者請求的時候,先查詢資料庫,然後再將資料快取的問題!使用者直接查詢事先被預熱的快取資料!

24.1.4. 快取更新

快取更新除了快取伺服器自帶的快取失效策略之外(redis 預設的有 6 中策略可供選擇),我們還可以根據具體的業務需求進行自定義的快取淘汰,常見的策略有兩種:

(1)定時去清理過期的快取;

(2)當有使用者請求過來時,再判斷這個請求所用到的快取是否過期,過期的話就去底層系統得到新資料並更新快取。

訊息中介軟體RabbitMQ

rabbitmq 是用erlang實現的乙個高併發高可靠amqp訊息佇列伺服器。rabbitmq 依賴於erlang環境,所以先要安裝erlang 執行 otp win32 r16b03.exe 再安裝rabbitmq 執行 rabbitmq server 3.2.3.exe 新增環境變數 rabb...

訊息中介軟體RabbitMQ

1非同步 不等待 2解耦 任務的序列變並行 3流量削峰 大任務量負載均衡 rabbitmq,kafka,flume amqp advanced message queue protocol 0 訊息 分為訊息頭和訊息體,訊息頭包含 路由鍵 routing key,優先順序priority,deliv...

rabbitMq 訊息中介軟體

rabbitmq簡介 rabbitmq作為乙個訊息中介軟體,其雖然是用erlang 語言編寫的,其能夠勝任每秒十萬級別的資料讀與寫。可以說,效率是特別的高。訊息中介軟體,一般分為訊息提供者,訊息消費者,訊息佇列,交換機,繫結這幾個元件。訊息提供者 主要負責訊息的傳送到中介軟體伺服器中的佇列了,等待對...