應(yīng)用消息隊列可以對系統(tǒng)進(jìn)行解耦,流量削峰,在分布式系統(tǒng)設(shè)計中,消息隊列是重要的組件之一。

在開發(fā)中應(yīng)用過ActiveMQ,kafka等mq,不過對消息隊列背后的實現(xiàn)原理關(guān)注不多,其實了解消息隊列背后的實現(xiàn)特別重要,

比如對一致性等實現(xiàn)的關(guān)注,可以幫助我們在開發(fā)中避免踩坑,規(guī)避問題的出現(xiàn)。這篇文章簡單探討下當(dāng)設(shè)計和實現(xiàn)一個消息隊列時,我們需要關(guān)心哪些地方。

 

消息隊列功能和特性

一個傳統(tǒng)意義上的消息隊列,需要支持消息的發(fā)送,接受和消息暫存的功能。

在實際應(yīng)用中,對消息隊列的要求遠(yuǎn)不止于此,在不同的業(yè)務(wù)場景中,需要消息隊列提供如順序消息,消息可靠性,消息持久化等需求。

 

1.即時通信和消息隊列

從消息能否會被即時接受和處理的角度,可以把消息傳遞的方式分為兩種。

一種是即時消息通訊,也就是說消息從發(fā)送者一端發(fā)出后立即就可以達(dá)到接收者一端;

另一種方式稱為延遲消息通訊,即消息從某一端發(fā)出后,首先進(jìn)入一個容器進(jìn)行臨時存儲,當(dāng)達(dá)到某種條件后,再由這個容器發(fā)送給另一端。

延遲消息通訊的容器實現(xiàn)就是消息隊列。

電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

2.消息隊列基礎(chǔ)功能

消息隊列需要支持消息的發(fā)送,消息暫存,和消息的異步消費,

3.消息隊列需要支持的特性

除了基本功能以外,消息隊列在某些特殊的場景還需要支持事務(wù),消息重試等功能。

  • 消息的順序

  • 投遞可靠性保證

  • 消息持久化

  • 支持不同消息模型

  • 多實例集群功能

  • 分布式環(huán)境下的負(fù)載均衡

 

消息隊列的基礎(chǔ)設(shè)計

為了實現(xiàn)消息隊列的基礎(chǔ)功能,即消息的傳輸,存儲和消費,

需要從以下幾個維度去進(jìn)行設(shè)計:

  • 通信協(xié)議

  • 存儲選擇

  • 消費關(guān)系維護

1.通信協(xié)議

消息既是信息的載體,消息發(fā)送者需要知道如何構(gòu)造消息,消息接收者需要知道如何解析消息,它們需要按照一種統(tǒng)一的格式描

網(wǎng)友評論