mqtt 与 MQ 的区别

mqtt 与 MQ 的区别:

mqtt:一种通讯协议,相似人类交谈中的汉语、英语、俄语中的一种语言规范
MQ:一种通讯通道,也叫消息队列,相似人类交谈中的用电话、email、微信的一种通讯方式
json:一种内容格式,相似人类交谈中的排比句等方式web

市面上的MQ产品不少,如阿里自研并开源RocketMQ,还有相似RabbitMQ、ActiveMQ,他们无论支持MQTT协议,还支持如AMQP、stomp协议等等,EMQ 使用的协议是mqttjson

详细区别:

有三个基本概念:消息、消息协议、消息队列。微信

消息:信息的载体
消息协议:为了让消息发送者和消息接收者都可以明白消息所承载的信息(消息发送者须要知道如何构造消息;消息接收者须要知道如何解析消息),它们就须要按照一种统一的格式描述消息,这种统一的格式称之为消息协议。因此,有效的消息必定具备某一种格式;而没有格式的消息是没有意义的。
消息队列:消息从发送者到接收者的方式也有两种。
一种为即时消息通信,也就是说消息从一端发出后(消息发送者)当即就能够达到另外一端(消息接收者),这种方式的具体实现就是咱们已经介绍过的RPC固然单纯的http通信也知足这个定义);
另外一种为延迟消息通信,即消息从某一端发出后,首先进入一个容器进行临时存储,当达到某种条件后,再由这个容器发送给另外一端。 这个容器的一种具体实现就是消息队列,如RabbitMQ。架构

从上图能够看到,某一种消息通信软件(或者叫作程序库)的实现都创建在“协议”基础上:RMI程序库创建在RMI协议上(RMI协议是JAVA规范协议的一部分) ,属于一种“即时消息通信”;RabbitMQ和Qpid消息通信软件的设计依据是AMQP协议,属于一种“延迟消息通信”。优化

虽然消息协议存在“私有协议”和“开放协议”之分(是否向行业开放消息规范文档、是否容许某个组织更改协议),虽然某一个软件(程序库)不必定只支持一种协议(例如ActiveMQ实现了多种消息协议),虽然某一种协议也不必定只有一种软件(程序库)实现(例如可以支持webservice协议的程序库就有Codehaus XFire、Apache CXF、Jboss RESTEasy等),可是这并不影响“某一种消息通信软件(或者叫作程序库)的实现都创建在“协议”基础上”的概念,反而是这个基本概念增强了。
AMQP的实现产品(例如RabbitMQ)spa

ActiveMQ是Apache软件基金会的开源产品,支持AMQP协议、MQTT协议(和XMPP协议做用相似)、Openwire协议和Stomp协议等多种消息协议。而且ActiveMQ完整支持JMS API接口规范。.net

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原理blog

说白了都是传统消息系统(老爸)的子嗣,只是与不一样的场景(老妈)结合的产物。不过,二者却能够结合起来使用。好比能够用MQTT接受物联网设备上传的数据,而后接入Kafka,最后能够同时分发到HDFS归档、数据仓库作OLAP分析、Elasticsearch作全文检索,这样的架构很是适合大型物联网项目,不但可以处理海量数据同时也具备很好的扩展性。接口

MQTT是在TCP之上的应用层协议,对物联网应用环境作了很是多的优化,TCP是传输层协议,是更通用层的协议。

 

 

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

相关文章
相关标签/搜索