訊息佇列的理解

2021-08-18 07:36:32 字數 1137 閱讀 6525

訊息佇列的主要特點是非同步處理,主要目的是減少請求響應時間和解耦。所以主要的使用場景就是將比較耗時而且不需要即時(同步)返回結果的操作作為訊息放入訊息佇列。

同時由於使用了訊息佇列,只要保證訊息格式不變,訊息的傳送方和接收方並不需要彼此聯絡,也不需要受對方的影響,即解耦和。

例子:假設使用者在你的軟體中註冊,服務端收到使用者的註冊請求後,它會做這些操作:

校驗使用者名稱等資訊,如果沒問題會在資料庫中新增乙個使用者記錄

如果是用郵箱註冊會給你傳送一封註冊成功的郵件,手機註冊則會傳送一條簡訊

分析使用者的個人資訊,以便將來向他推薦一些志同道合的人,或向那些人推薦他

傳送給使用者乙個包含操作指南的系統通知

等等……

但是對於使用者來說,註冊功能實際只需要第一步,只要服務端將他的賬戶資訊存到資料庫中他便可以登入上去做他想做的事情了。至於其他的事情,非要在這一次請求中全部完成麼?值得使用者浪費時間等你處理這些對他來說無關緊要的事情麼?所以實際當第一步做完後,服務端就可以把其他的操作放入對應的訊息佇列中然後馬上返回使用者結果,由訊息佇列非同步的進行這些操作。

個人理解,將比較耗時的操作放入訊息佇列中,並立刻返回使用者結果,又訊息佇列處理耗時的操作。

注意:在軟體的正常功能開發中,並不需要去刻意的尋找訊息佇列的使用場景,而是當出現效能瓶頸時,去檢視業務邏輯是否存在可以非同步處理的耗時操作,如果存在的話便可以引入訊息佇列來解決。否則盲目的使用訊息佇列可能會增加維護和開發的成本卻無法得到可觀的效能提公升,那就得不償失了。

·  跨系統的非同步通訊,所有需要非同步互動的地方都可以使用訊息佇列。就像我們除了打**(同步)以外,還需要發簡訊,發電子郵件(非同步)的通訊方式。

·  在企業應用整合(eai)中,檔案傳輸,共享資料庫,訊息佇列,遠端過程呼叫都可以作為整合的方法。

·  應用內的同步變異步,比如訂單處理,就可以由前端應用將訂單資訊放到佇列,後端應用從佇列裡依次獲得訊息處理,高峰時的大量訂單可以積壓在佇列裡慢慢處理掉。由於同步通常意味著阻塞,而大量執行緒的阻塞會降低計算機的效能。

·  訊息驅動的架構(eda),系統分解為訊息佇列,和訊息製造者和訊息消費者,乙個處理流程可以根據需要拆成多個階段(stage),階段之間用佇列連線起來,前乙個階段處理的結果放入佇列,後乙個階段從佇列中獲取訊息繼續處理。

·  應用需要更靈活的耦合方式,如發布訂閱,比如可以指定路由規則。

關於訊息佇列的理解

目前常用的訊息中介軟體有activemq,rabbitmq,kafka等 之前的專案一直使用activemq,但是面試的時候人家問我訊息佇列我都說只用了通訊,不敢亂說.所以專門了解了下.這是在知乎上面看的感覺很不錯很感謝作者 假設使用者在你的軟體中註冊,服務端收到使用者的註冊請求後,它會做這些操作 ...

對於訊息佇列的理解

訊息佇列可以簡單理解為 把要傳輸的資料放在佇列中。訊息佇列中介軟體是分布式系統中重要的元件,主要解決應用耦合,非同步訊息,流量削鋒等問題。1.解耦 比如說某乙個系統a要與其他系統打交道 即呼叫其中的方法 如果其它系統改變或者新增系統,那麼a系統都會改變,這樣的話耦合度比較高,比較麻煩。我們a系統將產...

對於訊息佇列的理解。

我們在開發的過程中,會遇到像這樣的情況 比如,我們需要開發乙個給註冊使用者傳送郵件的功能。其實製作起來並不是很難,無非就是兩步,1 獲取需要傳送郵件的郵箱,並填寫傳送內容。2 傳送。這功能實現起來很簡單,也很寫,對吧!那麼,現在問題來了。我現在有好百萬的併發,幾百萬個使用者同時都在註冊 當然這裡是假...