訊息佇列概述及應用場景

2021-08-21 04:11:16 字數 2459 閱讀 7217

「訊息」是在兩台計算機間傳送的資料單位,訊息可以非常簡單,例如只包含文字字串;也可以更複雜,可能包含嵌入物件。

訊息被傳送到佇列中。

當中間人。佇列的主要目的是提供路由並保

證訊息的傳遞;如果傳送訊息時接收者不可用,訊息佇列會保留訊息,直到可以成功地傳

遞它。1.1  訊息生產者、訊息者、佇列、主題

訊息生產者producer:傳送訊息到訊息佇列。

訊息消費者consumer:從訊息佇列接收訊息。

訊息佇列queue:乙個先進先出的訊息儲存區域。訊息按照順序傳送接收,一旦訊息被消費處理,該訊息將從佇列中刪除。

主題topic:一種支援訊息多個訂閱者的機制。

1.2  點對點/queue訊息佇列模型

乙個生產者向乙個特定的佇列傳送訊息,乙個消費者從該佇列中接收訊息;

訊息的生產者和消費者可以不同時處於執行狀態。

每乙個成功處理的訊息都由訊息消費者簽收確認(acknowledge)。如圖:

1.3 發布訂閱訊息模型topic

發布訂閱模型中,支援向乙個特定的訊息主題topic發布訊息。0個或多個訂閱者可能對接收來自特定訊息主題的訊息感興趣。在這種模型下,發布者和訂閱者彼此不知道對方,這種模式被概括為:多個消費者可以獲得訊息在發布者和訂閱者之間存在時間依賴性,即必須先訂閱,再傳送訊息,而後接收訂閱的訊息,這個操作順序必須保證。如圖:

1.4  訊息的順序性保證

基於queue訊息模型,利用fifo先進先出的特性,可以保證訊息的順序性。

1.5  訊息的ack機制

即訊息的ackownledge確認機制,為了保證訊息不丟失,訊息佇列提供了訊息acknowledge機制,即ack機制,當consumer確認訊息已經被消費處理,傳送乙個ack給訊息佇列,此時訊息佇列便可以刪除這個訊息了。如果consumer宕機/關閉,沒有傳送ack,訊息佇列將認為這個訊息沒有被處理,會將這個訊息重新傳送給其他的consumer重新消費處理。

1.6. 訊息的同步和非同步收發

同步:訊息的收發支援同步收發的方式。同時還有另一種同步方式:同步收發場景下,訊息生產者和消費者雙向應答模式,例如:張三寫封信送到郵局中轉站,然後李四從中轉站獲得信,然後在寫乙份回執信,放到中轉站,然後張三去取,當然張三寫信的時候就得寫明回信位址。訊息的接收如果以同步的方式(pull)進行接收,如果佇列中為空,此時接收將處於同步阻塞狀態,會一直等到訊息的到達。

非同步:訊息的收發同樣支援非同步方式:非同步傳送訊息,不需要等待訊息佇列的接收確認;非同步接收訊息,以push的方式觸發訊息消費者接收訊息。

1.7 訊息的事務支援

訊息的收發處理支援事務,例如:在任務中心場景中,一次處理可能涉及多個訊息的接收、處理,這應該處於同乙個事務範圍內,如果乙個訊息處理失敗,事務回滾,訊息重新回到佇列中。

1.8 訊息的持久化

訊息的持久化,對於一些關鍵的核心業務來說是非常重要的,啟用訊息持久化後,訊息佇列宕機重啟後,訊息可以從持久化儲存恢復,訊息不丟失,可以繼續消費處理。

1.9 訊息佇列的高可用性

在實際生產環境中,使用單個例項的訊息佇列服務,如果遇到宕機、重啟等系統問題,訊息佇列就無法提供服務了,因此很多場景下,我們希望訊息佇列有高可用性支援,例如azure servicebus messaging就有高可用保障機制;rabbitmq有映象+haproxy的高可用性方案,activemq也有基於leveldb+zookeeper的高可用性方案。這點大家在實際技術選型時需要重要考慮,雲端的mq服務,比如azure messaging的sla就承諾了99.9%, 也是非常推薦的。

以下介紹訊息佇列在實際生活中的應用場景。非同步處理,應用解耦、流量削峰和訊息通訊4個場景。

2.1 非同步處理小結

:如以上案例描述,傳統的方式系統的效能(併發量,吞吐量,響應時間)會有瓶頸。如何解決這個問題呢?

引入訊息佇列,將不是必須的業務邏輯,非同步處理。改造後的架構如下:

2.2 應用解耦

的應用,解決大量日誌傳輸的問題。架構簡化如下:

kafka訊息佇列,負責日誌資料的接收,儲存和**;

· 日誌處理應用:訂閱並消費kafka佇列中的日誌資料;

訊息佇列應用場景

場景說明 使用者註冊後,需要發註冊郵件和註冊簡訊。傳統的做法有兩種1.序列的方式 2.並行方式。id iframe 0.05881618439392011 scrolling no 2 並行方式 將註冊資訊寫入資料庫成功後,傳送註冊郵件的同時,傳送註冊簡訊。以上三個任務完成後,返回給客戶端。與序列的...

訊息佇列應用場景

場景說明 使用者註冊後,需要發註冊郵件和註冊簡訊。傳統的做法有兩種1.序列的方式 2.並行方式。1 序列方式 將註冊資訊寫入資料庫成功後,傳送註冊郵件,再傳送註冊簡訊。以上三個任務全部完成後,返回給客戶端。2 並行方式 將註冊資訊寫入資料庫成功後,傳送註冊郵件的同時,傳送註冊簡訊。以上三個任務完成後...

訊息佇列應用場景解析

分布式訊息服務dms是完全託管的高效能訊息佇列服務,提供普通佇列 有序佇列 kafka activemq rabbitmq,相容http tcp amqp協議,為分布式應用提供靈活可靠的非同步通訊機制。使用dms,使用者可以建立訊息佇列,將訊息佇列作為乙個傳輸訊息的中轉站,儲存應用程式不同元件間傳遞...