当前位置: 首页 > news >正文

MQTT协议

一、MQTT简介

MQTT被广泛用于物联网(IoT:Internet of Things)领域,其中大量的设备需要进行实时通信和数据交换。它采用了一种发布/订阅(publish/subscribe)模型,其中消息的发送者(发布者)将消息发布到特定的主题(topic),而订阅者可以选择性地订阅感兴趣的主题,以接收相应的消息。

二、MQTT特点

  1. 轻量级:MQTT协议的消息头部相对较小,占用的带宽和资源较少,适合在资源受限的设备(如传感器和嵌入式系统)上运行。
  2. 低带宽:设计上考虑了低带宽的需求,适合不稳定的网络环境。
  3. 发布/订阅模式:支持异步通信,简化了客户端的通信逻辑。客户端可以发布消息到特定主题,订阅相同主题的客户端将接收这些消息,无需知道消息的来源。
  4. 可靠性:支持不同级别的消息服务质量(QoS),确保消息的可靠传输。QoS有三个级别:QoS 0(至多一次)、QoS 1(至少一次)和QoS 2(仅一次)。
  5. 持久会话和消息保留:客户端可以选择建立持久会话,以便在重新连接后接收离线期间发布的消息。服务器还可以选择保留特定主题的最新消息,以便新订阅者立即接收。
  6. 安全性:MQTT可以通过添加安全层(如TLS/SSL)来保护通信内容,确保数据的安全性。

三、订阅和发布模型

  • 客户端:发布消息或订阅消息的设备或应用程序。
  • 服务器(代理/Broker):负责接收发布的消息并将其分发给订阅了相应主题的客户端。
  • 主题:消息的分类标签,客户端通过主题发布或订阅消息。

四、MQTT的应用场景

MQTT广泛应用于物联网、智能家居、工业监控、传感器网络等领域。例如,在智能家居中,MQTT可以用于设备之间的通信,如智能灯泡、智能插座和智能安防设备等;在工业监控中,MQTT可以用于远程监控设备的状态和数据。

五、MQTT的未来发展

随着物联网技术的不断发展,MQTT协议的应用前景非常广阔。未来,MQTT协议将在标准化和互操作性、安全性增强、边缘计算集成以及大规模部署等方面取得进一步的发展。

六、Java 客户端

<dependency>  <groupId>org.eclipse.paho</groupId>  <artifactId>org.eclipse.paho.client.mqttv3</artifactId>  <version>1.2.5</version> <!-- 请检查最新版本 -->  
</dependency>
import org.eclipse.paho.client.mqttv3.MqttCallback;  
import org.eclipse.paho.client.mqttv3.MqttClient;  
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;  
import org.eclipse.paho.client.mqttv3.MqttException;  
import org.eclipse.paho.client.mqttv3.MqttMessage;  public class MqttSample {  public static void main(String[] args) {  String broker = "tcp://mqtt.eclipse.org:1883"; // MQTT代理地址  String clientId = "JavaSample";  MqttClient sampleClient = null;  try {  sampleClient = new MqttClient(broker, clientId);  MqttConnectOptions connOpts = new MqttConnectOptions();  connOpts.setCleanSession(true);  System.out.println("Connecting to broker: " + broker);  sampleClient.connect(connOpts);  System.out.println("Connected");  // 设置回调  sampleClient.setCallback(new MqttCallback() {  @Override  public void connectionLost(Throwable cause) {  System.out.println("Connection lost!");  }  @Override  public void messageArrived(String topic, MqttMessage message) throws Exception {  System.out.println("Message arrived. Topic: " + topic + " Message: " + message.toString());  }  @Override  public void deliveryComplete(IMqttDeliveryToken token) {  // 当消息被传递后调用  }  });  // 订阅主题  sampleClient.subscribe("MQTT Examples");  } catch (MqttException me) {  System.out.println("reason " + me.getReasonCode());  System.out.println("msg " + me.getMessage());  System.out.println("loc " + me.getLocalizedMessage());  System.out.println("cause " + me.getCause());  System.out.println("excep " + me);  me.printStackTrace();  } finally {  if (sampleClient != null) {  try {  sampleClient.disconnect();  } catch (MqttException e) {  e.printStackTrace();  }  }  }  }  
}


 

MQTT协议

RocketMQ

Kafka

设计目标

物联网设备间的轻量级通信

分布式消息传递和流处理平台

分布式消息系统

特点

低开销、低带宽占用

高性能、高可用性、高可靠性、灵活扩展性

高吞吐量、低延迟、可伸缩性、持久性

应用场景

物联网(IoT)、智能家居、远程传感器等

大规模数据处理、实时消息传递

大数据、实时数据处理、日志收集、监控分析等

消息模型

发布/订阅

点对点(P2P)、发布订阅(Pub/Sub)、顺序消息

发布/订阅、分区

性能特性

低资源消耗

顺序写入、零拷贝、批量处理

高吞吐量、分区并行处理

生态系统

物联网领域广泛应用

阿里巴巴及Apache社区支持

开源社区活跃,广泛应用

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 机器学习——第九章 聚类
  • 【人工智能】【机器学习】-好书推荐之《Python神经网络编程》
  • 趣味算法------开灯问题
  • React 中的 useContext 和 useReducer
  • 搭建高可用OpenStack(Queen版)集群(六)之部署Neutron控制/网络节点集群
  • 【秋招突围】2024届校招-拼多多笔试题-第一套
  • rk3568 android12 hdmi、耳机、喇叭音频切换
  • k8s(六)---pod
  • 【Material-UI】Checkbox 组件中的 Label Placement 设置详解
  • 基于SpringBoot+Vue的校园失物招领系统(带1w+文档)
  • 【产品经理】产品经理的产出有哪些?产品方案解决方案有哪些?
  • 零基础5分钟上手谷歌云GCP核心云开发技能 - 搭建和维护高可用数据库集群
  • 【JavaScript】数组四大方法命名 得push pop shift unshift的原因 和功能
  • cookie与session的区别+springboot使用
  • i2c讲解以及zyqn中的使用
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • docker python 配置
  • echarts花样作死的坑
  • ES6之路之模块详解
  • in typeof instanceof ===这些运算符有什么作用
  • JS学习笔记——闭包
  • pdf文件如何在线转换为jpg图片
  • PHP面试之三:MySQL数据库
  • Twitter赢在开放,三年创造奇迹
  • 阿里云应用高可用服务公测发布
  • 工作手记之html2canvas使用概述
  • 关于springcloud Gateway中的限流
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 基于web的全景—— Pannellum小试
  • 聚簇索引和非聚簇索引
  • 七牛云假注销小指南
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 数组的操作
  • 为视图添加丝滑的水波纹
  • 详解NodeJs流之一
  • 小李飞刀:SQL题目刷起来!
  • 第二十章:异步和文件I/O.(二十三)
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • ### RabbitMQ五种工作模式:
  • #vue3 实现前端下载excel文件模板功能
  • (2)STM32单片机上位机
  • (2022 CVPR) Unbiased Teacher v2
  • (javascript)再说document.body.scrollTop的使用问题
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (回溯) LeetCode 40. 组合总和II
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (三)elasticsearch 源码之启动流程分析