MQTT:物联网消息传递标准

简介

MQTT是用于物联网(IoT)的OASIS标准消息传递协议。它被设计为一种非常轻量级的发布/订阅消息传送,非常适合以较小的代码占用量和最小的网络带宽连接远程设备。如今,MQTT被广泛用于汽车,制造业,电信,石油和天然气等行业。

MQ?

“ MQ”是指MQ系列,这是IBM为支持MQ遥测传输而开发的产品。当Andy和Arlen在1999年创建协议时,他们以IBM产品的名字命名。许多来源错误地将MQTT标记为消息队列协议。那明显是错的,MQTT并不是传统的消息排队解决方案。

为什么选择MQTT?

  • 轻巧高效:MQTT客户端非常小,需要最少的资源,因此可以在小型微控制器上使用。MQTT消息头很小以优化网络带宽。
  • 双向通讯:MQTT允许设备到云之间以及云到设备之间的消息传递。这使得易于将消息广播到事物组。
  • 扩展到数百万个事物:MQTT可以扩展以与数百万个IoT设备连接。
  • 可靠的消息传递:对于许多物联网用例而言,消息传递的可靠性至关重要。这就是MQTT具有3种定义的服务质量级别的原因:0-最多一次,1-至少一次,2-恰好一次
  • 对不可靠网络的支持:许多物联网设备通过不可靠的蜂窝网络进行连接。MQTT对持久性会话的支持减少了将客户端与代理重新连接的时间。
  • 安全启用:MQTT使您可以轻松地使用TLS加密消息并使用现代身份验证协议(例如OAuth)对客户端进行身份验证。

MQTT发布/订阅架构

MQTT的使用

说了这么多,MQTT只是一种协议应该怎么使用呢?简单的看分为两个部分:服务端、客户端。接下来,我们利用EMQ作为服务端,MQTT.fx作为客户端,来简单走一遍。

EMQ的安装

  • 这里我使用的时阿里ECS云主机,系统时CentOS。
  • 需要开通安全组:18083、1883
  • 进入CentOS界面输入以下命令:
wget https://packages.emqx.io/emqx-ce/v2.3.10/emqttd-centos7-v2.3.10.zip	//下载安装
yum install unzip -y //安装压缩包
unzip emqttd-centos7-v2.3.10.zip //解压服务器的压缩包
cd emqttd //进入emqtt文件夹
./bin/emqttd console
CTRL+c //关闭控制台
./bin/emqttd start //守护进程模式启动,启动错误日志将输出在 log/ 目录
./bin/emqttd_ctl status //EMQ 消息服务器进程状态查询
  • 登陆MQTT的后台:
服务ip+18083端口,如:192.168.2.100:18083
账号:admin 密码:public

### MQTT.fx客户端安装
- 这里我使用的时win10系统,[去下载]("http://mqttfx.jensd.de/index.php/download")
- 安装完成后出现如下界面:

- 点击 `Extras` - `Edit Connection Profiles` 来编辑:

- 配置你的服务端ip,输入用户名和密码:admin, public:

- 配置完成后,点击 `Connect` 连接,右边的指示灯变录说明连接成功。如果没有请检查你的ip和端口,以及阿里安全组是否开通:

- 切换到 `Subscribe` 输入一个topic,然后来订阅它:

- 切换到 `Publish`,输入topic和要发送的内容,点击 `Publish` 来发布:

- 回到 `Subscribe` 可以看到发布的消息了:

## 参考资料

https://www.hivemq.com/blog/mqtt-essentials-part-1-introducing-mqtt/

https://www.emqx.io/cn/products/enterprise

http://mqttfx.jensd.de/index.php/download

MQTT的使用一的更多相关文章

  1. 海鑫智圣:物联网漫谈之MQTT协议

    什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...

  2. 几个MQTT的知识点

    开始正文前需要感谢一下网友“小龙”和emqtt.io群里的网友们的帮助,本人刚刚开始使用MQTT有很多不懂的地方,在emqtt.io群里询问解决方法的时候,“小龙”给我详细的讲解了一些MQTT的知识点 ...

  3. 基于MQTT协议进行应用开发

    官方协议有句如下的话来形容MQTT的设计思想: "It is designed for connections with remote locations where a "sma ...

  4. MQTT(三)-----连接与心跳

    MQTT协议笔记之连接和心跳 - 推酷 http://www.tuicool.com/articles/AFvmee 互联网推送服务原理:长连接+心跳机制(MQTT协议) - clh604的专栏 - ...

  5. Mosquitto搭建Android推送服务(一)MQTT简介

    总体概要: MQTT系列文章分为4部分 1.MQTT简介 2.mosquitto服务器搭建 3.编写Mosquitto的可视化工具 4.使用Mosquitto完成Android推送服务 文章钢要: 对 ...

  6. 【开源】MQTT推送服务器——zer0MqttServer(Java编写)

    目录 说明 功能 如何使用 参考帮助 说明 重要的放前面:V1.0版本是一个非常基础的版本,除了完整的MQTT协议实现外,其他功能什么都没做. MQTT 协议是 IBM 开发的即时通讯协议,相对于 I ...

  7. TCP/IP, WebSocket 和 MQTT

    按照OSI网络分层模型,IP是网络层协议,TCP是传输层协议,而HTTP和MQTT是应用层的协议.在这三者之间, TCP是HTTP和MQTT底层的协议.大家对HTTP很熟悉,这里简要介绍下MQTT.M ...

  8. 云巴:基于MQTT协议的实时通信编程模型

    概要 有人常问,云巴实时通信系统到底提供了一种怎样的服务,与其他提供推送或 IM 服务的厂商有何本质区别.其实,从技术角度分析,云巴与其它同类厂商都是面向开发者的通信服务,宏观的编程模型都是大同小异, ...

  9. MQTT 消息 发布 订阅

    当连接向一个mqtt服务器时,clientId必须是唯一的.设置一样,导致client.setCallback总是走到 connectionLost回调.报connection reset.调查一天才 ...

  10. MQTT开发笔记之《MQTT Server》

    MQTT SERVER 性能测试报告 : http://w3yyb.sinaapp.com/archives/1601各个MQTT SERVER功能列表: http://blog.lenix.xyz/ ...

随机推荐

  1. Python表格处理模块xlrd在Anaconda中的安装

      本文介绍在Anaconda环境下,安装Python读取.xls格式表格文件的库xlrd的方法.   xlrd是一个用于读取Excel文件的Python库,下面是xlrd库的一些主要特点和功能: 读 ...

  2. #Tarjan#洛谷 4819 [中山市选]杀人游戏

    题目 分析 缩点后显然只考虑入度为0的点的个数, 但是问题是如果有一个入度为0的点缩点前只有1个点 且它的出边上的所有点都可以被其它入度为0的点遍历, 那么可以将其它点全部排除后剩下的这个点就是凶手, ...

  3. 前端常用库 CDN

    jQuery 链接: v1.9.1:https://i.mazey.net/lib/jquery/1.9.1/jquery.min.js v2.1.1:https://i.mazey.net/lib/ ...

  4. 基于pdfbox实现的pdf添加文字水印工具

    简述 最近有个需求需要给pdf加文字水印,于是开始搜索大法,但是发现网络上的代码基本都是将字体文件直接放在jar包里面.个人强迫症发作(手动狗头),想要像poi一样直接加载系统字体,于是研究了一下午p ...

  5. 应用可靠性与性能不给力?HarmonyOS HiViewDFX了解一下

    原文链接:https://mp.weixin.qq.com/s/Y44jUEB3ttlijbMDPrBcNg,点击链接查看更多技术内容:   作为基础软件服务子系统的HarmonyOS HiViewD ...

  6. 《Effective C#》系列之(一)——异常处理与资源管理

    请注意,<Effective C#>中的异常处理与资源管理部分实际上是第四章的内容.以下是关于该章节的详细解释. 第四章:异常处理与资源管理 一. 了解异常处理机制 异常处理机制使程序员能 ...

  7. C#微服务必学清单

    在 C# 领域,有一些不错的微服务书籍和开源框架,对于学习微服务相关知识非常有帮助.以下是一些建议您阅读的微服务书目和开源框架. 微服务书目: 1. <Building Microservice ...

  8. oracle表名、字段名等对象的命名长度限制(报错:ORA-00972: 标识符过长)

    oracle表名.字段名等对象的命名长度限制(报错:ORA-00972: 标识符过长) 简单来说,出现了ORA-00972: 标识符过长的错误 找来找去发现是自己的中间表名太长导致的 Oracle数据 ...

  9. 剑指offer56(Java)-数组中出现的次数Ⅰ(中等)

    题目: 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). 示例 1: 输入:nums = [4,1, ...

  10. BizWorks助力企业应用的高效开发与复用

    简介: BizWorks作为企业级云原生应用数字工作台,能很好地支撑企业数字中台建设.云原生应用开发.企业资产运营管理等场景.本文不会全面介绍BizWorks平台的能力,而是着重介绍BizWorks在 ...