對於訊息佇列的理解

2021-10-24 23:47:04 字數 875 閱讀 8097

訊息佇列可以簡單理解為:把要傳輸的資料放在佇列中。

訊息佇列中介軟體是分布式系統中重要的元件,主要解決應用耦合,非同步訊息,流量削鋒等問題。

1.解耦

比如說某乙個系統a要與其他系統打交道(即呼叫其中的方法),如果其它系統改變或者新增系統,那麼a系統都會改變,這樣的話耦合度比較高,比較麻煩。

我們a系統將產生的資料發入訊息佇列中,其它的系統再去訊息佇列來進行消費,那麼其他系統的減少或者新增系統即與a系統關係不大了,這樣來實現解耦的功能。

2.非同步

假設使用者註冊後,需要發註冊郵件和註冊簡訊

某乙個使用者使用系統a,但是a要呼叫系統b,c,d,但是每乙個系統返回的時間是不一樣的,你必須要等待全部返回後才可以響應使用者。

如果我們這裡採用訊息佇列,當使用者傳送請求後,我們把資料傳給訊息佇列,然後再直接響應給使用者我已經傳送了資訊。

3.削峰

比如平常使用者的請求我們會直接訪問資料庫,在大量使用者過來的時候,這樣的話我們會對資料庫照常比較大的壓力。

在這裡我們增加乙個訊息佇列,這樣的話不管你請求來多少,我先存入訊息佇列,然後我再讓系統慢慢的處理你的請求(如右圖),這樣很好的減緩了資料庫的訪問壓力。

四 .使用訊息佇列帶來的一些問題

1、系統可用性降低:

系統可用性在某種程度上降低,為什麼這樣說呢?在加入mq之前,你不用考慮訊息丟失或者說mq掛掉等等的情況,但是,引入mq之後你就需要去考慮了!

2、系統複雜性提高:

加入mq之後,你需要保證訊息沒有被重複消費、處理訊息丟失的情況、保證訊息傳遞的順序性等等問題!

3、一致性問題:

我上面講了訊息佇列可以實現非同步,訊息佇列帶來的非同步確實可以提高系統響應速度。但是,萬一訊息的真正消費者並沒有正確消費訊息怎麼辦?這樣就會導致資料不一致的情況了。

對於訊息佇列的理解。

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

訊息佇列的理解

訊息佇列的主要特點是非同步處理,主要目的是減少請求響應時間和解耦。所以主要的使用場景就是將比較耗時而且不需要即時 同步 返回結果的操作作為訊息放入訊息佇列。同時由於使用了訊息佇列,只要保證訊息格式不變,訊息的傳送方和接收方並不需要彼此聯絡,也不需要受對方的影響,即解耦和。例子 假設使用者在你的軟體中...

自己對於訊息機制的理解

一直對訊息機制的理解不夠深入,還有對遞迴的的理解不夠好 一直不明白為什麼這裡是這樣,那裡是那樣,自己撲該過才會恍然大悟 哦 原來是醬紫。開始第一次用訊息機制的時候覺得它還是用起來很不順手。不理解為什麼要加上訊息傳送的優先順序。還覺得這東西對方法執行的時序控制很不好,以至於寫了一大堆我自己都頂不順了的...