阿里雲 MQTT 與 RocketMQ 的應用場景對比

本文主要在什麼是微消息隊列 MQTT?的基礎上介紹微消息隊列 MQTT 和傳統消息中間件的關聯和區別,並針對實際應用場景下的產品選型給出建議。

背景信息

傳統的消息中間件,例如消息隊列 RocketMQ、消息隊列 Kafka 等都是面向微服務大數據等領域,負責消息的存儲和轉發,消息的生產者和消費者都是服務端應用。

這種設計很適合服務端技術棧固定、語言平臺固定的場景。而移動互聯網和 IoT 領域則有所不同,這類場景更側重於多語言多平臺的海量設備接入,消息的生產和消費過程的業務屬性很突出,傳統的消息中間件並不適合這些領域。

秉承單一職責的原則,微消息隊列 MQTT 在設計上是一個面向移動互聯網和 IoT 領域的無狀態網關,只關心海量移動端設備的接入、管理和消息傳輸,消息數據的存儲則都會路由給後端存儲產品,例如傳統的消息中間件消息隊列 RocketMQ、消息隊列 Kafka 等產品。

在這種職責劃分下,終端設備將消息發送到微消息隊列 MQTT 後,消息會根據微消息隊列 MQTT 綁定的存儲產品被路由到指定產品,雲端應用依然可以維持傳統的微服務開發方案,通過對接雲端存儲產品即可和終端設備進行互動,兩者之間通過微消息隊列 MQTT 實現了數據互通能力。

適用場景對比

在一個業務場景中,可能包含多種不同類型的應用組件,每個組件承擔不同的角色。因此,在方案選型時如需要使用到消息產品,需要先了解微消息隊列 MQTT 和傳統消息中間件的關聯和區別,合理搭配使用,比如組件 A 的消息收發使用微消息隊列 MQTT,組件 B 的消息收發使用消息隊列 RocketMQ。

下文將根據場景舉例描述微消息隊列 MQTT 和傳統的消息中間件的區別,爲方便描述,傳統的消息中間件以消息隊列 RocketMQ 爲例,其他產品例如消息隊列 Kafka 和消息隊列 AMQP(RabbitMQ)同理。

 

 

 

組合使用場景示例

場景示例一

在物聯網 IoT 場景中,成千上萬(甚至數百萬)規模的設備傳感器可使用微消息隊列 MQTT 上傳數據,需做數據分析的服務端(即部署在服務器上的應用)則可以通過消息隊列 RocketMQ 完成數據的分析與處理。

場景示例二

在車聯網場景中,上百萬輛車需要上傳車輛信息數據到雲端(服務端),雲端同時也會下發指令到任意車輛或廣播到所有的車輛。車輛可以通過 MQTT SDK 連接到微消息隊列 MQTT 實現數據上報以及指令接收,監管系統(數據分析系統)可以通過消息隊列 RocketMQ 的 SDK 進行消息訂閱以及指令下發。如下圖所示:

 

 

 基於以上區別,推薦您在移動端設備上使用微消息隊列 MQTT,而在服務端應用中則使用消息隊列 RocketMQ(或者其他消息產品)。

 

功能對比

微消息隊列 MQTT 和消息隊列 RocketMQ 的具體功能特性的對比如下:

 

 

 

選型指導

基本原則總結如下:

對於部署在服務器上的應用,推薦使用消息隊列 RocketMQ 接入。

對於部署在移動終端、App 或瀏覽器頁面等平臺上的應用,推薦使用微消息隊列 MQTT 接入。

針對常見的應用場景,建議的微消息隊列 MQTT 和消息隊列 RocketMQ 選型如下:

√ 表示建議使用該消息隊列產品;× 表示不建議使用該消息隊列產品。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章