前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MQTT是什么,和MQ有什么区别?

MQTT是什么,和MQ有什么区别?

原创
作者头像
半月无霜
发布2024-11-16 19:31:49
发布2024-11-16 19:31:49
6701
举报
文章被收录于专栏:半月无霜半月无霜

今日推荐文章:Go 语言实现 AES 算法的加解密操作-腾讯云开发者社区-腾讯云

点评:这篇文章主要介绍了AES算法及其在Go语言中的实现,包括了ESB模式、CBC模式和CFB模式的工作原理、优缺点以及应用场景,并提供了相应的代码示例,文章结构清晰,内容详实,对理解AES加密算法及其应用有很好的指导作用。

一、MQTT是什么

MQTT一种基于发布/订阅范式的轻量级即时通讯协议,专为低带宽和不可靠网络环境设计

最早由IBM提出,并已经成为OASIS(组织互操作性开放式标准Organization for the Advancement of Structured Information Standards)规范的一部分。

由于其设计简洁,MQTT非常适合低功耗和网络带宽有限的1oT(物联网)场景。作为一种机器对机器的通信协议,MQTT采用了发布/订阅模式而非请求/响应模式。

对于MQTT来说,就相当于一种模式一种规则。一种天上飞着的理念,要想使用,还得要有具体的技术落地实现。

就像是W3C组织定义了html,各大浏览器厂商,开发浏览器对这些标准进行实现。

我们只有使用浏览器,才能感受到html。同理,MQTT就是这样的


对于MQTT,协议中包含了三类角色

  • MQTT client publisher,生产者,一般指的是各种发送消息的智能设备
  • MQTT Broker,中间代理,消息的中转者
  • MQTT client subscriber,订阅者,一般指的是获取消息的终端设备

主要有下面的特点

  • 发布者和订阅者之间不直接建立联系,发布者无需等待订阅者的确认即可继续处理任务。
  • 用户可以自由选择时间来消费信息。发布者和订阅者无需同时在线。
  • 应用消息通过MQTT协议在网络上传输时,具有关联的服务质量(QoS)等级和主题(topic)。QoS保证了消息的可靠性MQTT为不同场景提供了三个等级的服务质量。
    • 最多一次交付(At most once):消息发送者只发送一次消息,但无法保证消息是否成功到达
    • 至少一次交付(At least once):消息接收者如果没有正确接收到消息或消息丢失,消息发送者会重发,以确保接收者至少收到一次
    • 只有一次交付(Exactly once):这是MQTT提供的最高级别服务质量,确保消息既不会丢失也不会重复

MQTT协议对消息的数据格式也非常简单,分为4块内容

  1. 消息头部信息:提供基本信息,如消息类型和Qos
  2. 剩余消息长度:提供本消息剩余有多少字节
  3. 长度可变的消息头部信息:可以提前定义的一些信息,消息的ID、标识、主题之类的。当然这一块也可以没有
  4. 长度可变的载荷信息部分:消息实际的数据信息

二、MQTT和MQ有什么区别

发布/订阅模式解耦了发布消息的客户端与订阅消息的客户端之间的关系,这意味着发布者和订阅者之间不需要直接建立联系。在这一模式中,只需要一个消息中间件(通常是MQTT代理),发布者和订阅者无需了解彼此。

那听着就像是MQ啊,MQTT和消息队列到底有什么区别?

是这样的,刚刚也提到过,MQTT是基于发布/订阅模式的协议。

MQ是具体的实现,针对的是应用服务,与应用服务之间的通信问题的具体实现。

MQ它可以对MQTT进行实现,也可以不对MQTT进行实现。MQ这种应用级产品,完成相对应的功能不就行了,没必要非得按照MQTT协议来进行开发。

下面看看我们Java程序员,常见的MQ是否实现了MQTT

  • RabbitMq:基于AMQP协议,但也可以通过插件的形式支持MQTT
  • ActiveMQ:支持MQTT
  • Kafka:不支持
  • RocketMq:不支持

再列举一下基于MQTT实现的技术

  • Mosquitto:开源
  • EMQX:开源,正在学习这个

三、如何选择

那讲讲如何去选择这些技术产品实现呢?

那也非常简单:看你是做什么的

当所开发的产品处于弱网环境下,且对消息的实时性,没那么高,就选EMQX即可

为啥不选RabbitMq呢,主要还是这个是针对应用服务级的,比如说有大量订单需要配送,调用到外送平台

这种业务场景,首先对网络环境要求很高,不能丢失消息,其次还能扛得住压力

所以EMQX这种小型的实现,主要还是针对于机器到机器的通信

我也正在学习EMQX,使用感受后面分享给大家

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、MQTT是什么
  • 二、MQTT和MQ有什么区别
  • 三、如何选择
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档