本文主要在產(chǎn)品概述的基礎(chǔ)上介紹微消息隊(duì)列 MQTT 和傳統(tǒng)消息中間件的關(guān)聯(lián)和區(qū)別,并針對(duì)實(shí)際應(yīng)用場(chǎng)景下的產(chǎn)品選型給出建議。 背景信息傳統(tǒng)的消息中間件,例如消息隊(duì)列 RocketMQ、消息隊(duì)列 Kafka 等都是面向微服務(wù)大數(shù)據(jù)等領(lǐng)域,負(fù)責(zé)消息的存儲(chǔ)和轉(zhuǎn)發(fā),消息的生產(chǎn)者和消費(fèi)者都是服務(wù)端應(yīng)用。 這種設(shè)計(jì)很適合服務(wù)端技術(shù)棧固定、語(yǔ)言平臺(tái)固定的場(chǎng)景。而移動(dòng)互聯(lián)網(wǎng)和 IoT 領(lǐng)域則有所不同,這類(lèi)場(chǎng)景更側(cè)重于多語(yǔ)言多平臺(tái)的海量設(shè)備接入,消息的生產(chǎn)和消費(fèi)過(guò)程的業(yè)務(wù)屬性很突出,傳統(tǒng)的消息中間件并不適合這些領(lǐng)域。 秉承單一職責(zé)的原則,微消息隊(duì)列 MQTT 在設(shè)計(jì)上是一個(gè)面向移動(dòng)互聯(lián)網(wǎng)和 IoT 領(lǐng)域的無(wú)狀態(tài)網(wǎng)關(guān),只關(guān)心海量移動(dòng)端設(shè)備的接入、管理和消息傳輸,消息數(shù)據(jù)的存儲(chǔ)則都會(huì)路由給后端存儲(chǔ)產(chǎn)品,例如傳統(tǒng)的消息中間件消息隊(duì)列 RocketMQ、消息隊(duì)列 Kafka 等產(chǎn)品。 在這種職責(zé)劃分下,終端設(shè)備將消息發(fā)送到微消息隊(duì)列 MQTT 后,消息會(huì)根據(jù)微消息隊(duì)列 MQTT 綁定的存儲(chǔ)產(chǎn)品被路由到指定產(chǎn)品,云端應(yīng)用依然可以維持傳統(tǒng)的微服務(wù)開(kāi)發(fā)方案,通過(guò)對(duì)接云端存儲(chǔ)產(chǎn)品即可和終端設(shè)備進(jìn)行互動(dòng),兩者之間通過(guò)微消息隊(duì)列 MQTT 實(shí)現(xiàn)了數(shù)據(jù)互通能力。 適用場(chǎng)景對(duì)比在一個(gè)業(yè)務(wù)場(chǎng)景中,可能包含多種不同類(lèi)型的應(yīng)用組件,每個(gè)組件承擔(dān)不同的角色。因此,在方案選型時(shí)如需要使用到消息產(chǎn)品,需要先了解微消息隊(duì)列 MQTT 和傳統(tǒng)消息中間件的關(guān)聯(lián)和區(qū)別,合理搭配使用,比如組件 A 的消息收發(fā)使用微消息隊(duì)列 MQTT,組件 B 的消息收發(fā)使用消息隊(duì)列 RocketMQ。 下文將根據(jù)場(chǎng)景舉例描述微消息隊(duì)列 MQTT 和傳統(tǒng)的消息中間件的區(qū)別,為方便描述,傳統(tǒng)的消息中間件以消息隊(duì)列 RocketMQ 為例,其他產(chǎn)品例如消息隊(duì)列 Kafka 和消息隊(duì)列 AMQP(RabbitMQ)同理。
組合使用場(chǎng)景示例
![]() 基于以上區(qū)別,推薦您在移動(dòng)端設(shè)備上使用微消息隊(duì)列 MQTT,而在服務(wù)端應(yīng)用中則使用消息隊(duì)列 RocketMQ(或者其他消息產(chǎn)品)。 功能對(duì)比微消息隊(duì)列 MQTT 和消息隊(duì)列 RocketMQ 的具體功能特性的對(duì)比如下:
選型指導(dǎo)基本原則總結(jié)如下:
針對(duì)常見(jiàn)的應(yīng)用場(chǎng)景,建議的微消息隊(duì)列 MQTT 和消息隊(duì)列 RocketMQ 選型如下:
|
|
來(lái)自: liang1234_ > 《mqtt》