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

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

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

 

消息隊(duì)列功能和特性

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

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

 

1.即時(shí)通信和消息隊(duì)列

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

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

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

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

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

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

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

3.消息隊(duì)列需要支持的特性

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

  • 消息的順序

  • 投遞可靠性保證

  • 消息持久化

  • 支持不同消息模型

  • 多實(shí)例集群功能

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

 

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

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

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

  • 通信協(xié)議

  • 存儲(chǔ)選擇

  • 消費(fèi)關(guān)系維護(hù)

1.通信協(xié)議

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

網(wǎng)友評(píng)論