mqtt 與 MQ 的區別


mqtt 與 MQ 的區別:

mqtt:一種通信協議,類似人類交談中的漢語、英語、俄語中的一種語言規范
MQ:一種通信通道,也叫消息隊列,類似人類交談中的用電話、email、微信的一種通信方式
json:一種內容格式,類似人類交談中的排比句等方式

市面上的MQ產品很多,如阿里自研並開源RocketMQ,還有類似RabbitMQ、ActiveMQ,他們不管支持MQTT協議,還支持如AMQP、stomp協議等等,EMQ 使用的協議是mqtt

詳細區別:

有三個基本概念:消息、消息協議、消息隊列。

消息:信息的載體
消息協議:為了讓消息發送者和消息接收者都能夠明白消息所承載的信息(消息發送者需要知道如何構造消息;消息接收者需要知道如何解析消息),它們就需要按照一種統一的格式描述消息,這種統一的格式稱之為消息協議。所以,有效的消息一定具有某一種格式;而沒有格式的消息是沒有意義的。
消息隊列:消息從發送者到接收者的方式也有兩種。
一種為即時消息通訊,也就是說消息從一端發出后(消息發送者)立即就可以達到另一端(消息接收者),這種方式的具體實現就是我們已經介紹過的RPC當然單純的http通訊也滿足這個定義);
另一種為延遲消息通訊,即消息從某一端發出后,首先進入一個容器進行臨時存儲,當達到某種條件后,再由這個容器發送給另一端。 這個容器的一種具體實現就是消息隊列,如RabbitMQ。

從上圖可以看到,某一種消息通訊軟件(或者叫做程序庫)的實現都建立在“協議”基礎上:RMI程序庫建立在RMI協議上(RMI協議是JAVA規范協議的一部分) ,屬於一種“即時消息通訊”;RabbitMQ和Qpid消息通訊軟件的設計依據是AMQP協議,屬於一種“延遲消息通訊”。

雖然消息協議存在“私有協議”和“開放協議”之分(是否向行業開放消息規范文檔、是否允許某個組織更改協議),雖然某一個軟件(程序庫)不一定只支持一種協議(例如ActiveMQ實現了多種消息協議),雖然某一種協議也不一定只有一種軟件(程序庫)實現(例如能夠支持webservice協議的程序庫就有Codehaus XFire、Apache CXF、Jboss RESTEasy等),但是這並不影響“某一種消息通訊軟件(或者叫做程序庫)的實現都建立在“協議”基礎上”的概念,反而是這個基本概念加強了。
AMQP的實現產品(例如RabbitMQ)

ActiveMQ是Apache軟件基金會的開源產品,支持AMQP協議、MQTT協議(和XMPP協議作用類似)、Openwire協議和Stomp協議等多種消息協議。並且ActiveMQ完整支持JMS API接口規范。

RabbitMQ基於Erlang語言開發和運行。它與Apache ActiveMQ有很多相同的特性,例如RabbitMQ完整支持多種消息協議:AMQP、STOMP、MQTT、HTTP,我們使用RabbitMQ時會默認使用AMQP1.0 協議。當然,RabbitMQ作為Apache ActiveMQ最主要的競品之一也有其獨特的功能特性。例如RabbitMQ支持一套特有的Routing-Exchange消息路由規則。這套規則可以按照消息內容,自動將消息歸類到不同的消息隊列中。

 

EMQ 與 MQ 的區別

MQTT在我看來就是一個簡單的發布訂閱協議, 提供一種服務質量的概念。EMQ則是對MQTT協議進行了實現,作為一個Broker,從Pub端到Broker是一個完整的MQTT交互,Broker到Sub端是一個完整的MQTT交互, 而Broker內部則是進行了消息的傳遞。點擊查看EMQ原理

說白了都是傳統消息系統(老爸)的子嗣,只是與不同的場景(老媽)結合的產物。不過,兩者卻可以結合起來使用。比如可以用MQTT接受物聯網設備上傳的數據,然后接入Kafka,最后可以同時分發到HDFS歸檔、數據倉庫做OLAP分析、Elasticsearch做全文檢索,這樣的架構非常適合大型物聯網項目,不但能夠處理海量數據同時也具有很好的擴展性。

MQTT是在TCP之上的應用層協議,對物聯網應用環境做了非常多的優化,TCP是傳輸層協議,是更通用層的協議。

 

 

原文鏈接:https://blog.csdn.net/wzhqazcscs/article/details/79364902

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM