目录标题

  • 一、MQTT协议介绍
  • (一)什么是MQTT
  • (二)MQTT角色组成
  • (三)三种消息发布服务质量:QoS
  • (四)消息的组成
  • (五) MQTT协议数据包结构
  • 二、安装EMQX
  • (一)安装单机版
  • (二)集群
  • 三、Websocket发布与订阅

一、MQTT协议介绍

(一)什么是MQTT

MQTT 是基于 Publish/Subscribe(发布/订阅) 模式的物联网通信协议,凭借简单易实现、支持 QoS、报文小等特点,占据了物联网协议的半壁江山。
简单来说:MQTT是一种通讯协议,不能直接使用,如果需要使用这个协议就需要使用实现了这种协议的组件,比如:EMQX 。

推荐观看:MQTT中文文档

(二)MQTT角色组成

  1. 服务端(Broker)
    EMQX就是一个MQTT的Broker,此外还要其他的Broker如下:

    到目前为止,比较流行的 MQTT Broker 有几个:
    1. Eclipse Mosquitto: https://github.com/eclipse/mosquitto
    使用 C 语言实现的 MQTT Broker。Eclipse 组织还还包含了大量的 MQTT 客户端项目:https://www.eclipse.org/paho/#
    2. EMQX: https://github.com/emqx/emqx
    使用 Erlang 语言开发的 MQTT Broker,支持许多其他 IoT 协议比如 CoAP、LwM2M 等
    3. Mosca: https://github.com/mcollina/mosca
    使用 Node.JS 开发的 MQTT Broker,简单易用。
    4. VerneMQ: https://github.com/vernemq/vernemq
    同样使用 Erlang 开发的 MQTT Broker

  2. 客户端(消费者【订阅】、生产者【发布】)

    • EMQX 通过里面的websocket 可以实现消息的发布与订阅
    • 当然我们常常会通过java代码来实现我们消息的生产者和消费者

    MQTT与EMQX
    MQTT属于是物联网的通信协议,在MQTT协议中有两大角色:客户端(发布者/订阅者),服务端(Mqttbroker);针对客户端和服务端需要有遵循该协议的的具体实现,EMQ/EMQ X就是MQTT Broker的一种实现。

注意:

在安装好EMQX代理服务器后,EMQX 不仅仅为我们提供了Mqtt broker,EMQX 的dashboard(一个EMQX的web界面)可以通过 websocket 这个功能实现消息的发布与订阅

EMQX 的dashboard如下:

(三)三种消息发布服务质量:QoS

MQTT有三种消息发布服务质量:

  • QoS 0 “至多一次” (消费次数<=1),消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。
  • QoS 1 “至少一次” (消费次数>=1),确保消息到达,但消息重复可能会发生。
  • QoS 2 “只有一次” (消费次数=1),确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中,消息重复或丢失会导致不正确的结果。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。

(四)消息的组成

MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:
(1) Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容。
(2) payload,可以理解为消息的内容,是指订阅者具体要使用的内容。

(五) MQTT协议数据包结构

(1)固定头(Fixed header)。存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识,
连接,发布,订阅,心跳等。其中固定头是必须的,所有类型的MQTT协议中,都必须包含固定头。
(2)可变头(Variable header)。存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其
具体内容。可变头部不是可选的意思,而是指这部分在有些协议类型中存在,在有些协议中不存在
(3)消息体(Payload)。存在于部分MQTT数据包中,表示客户端收到的具体内容。 与可变头一样,
在有些协议类型中有消息内容,有些协议类型中没有消息内容。

二、安装EMQX

(一)安装单机版

官方下载地址:https://www.emqx.com/zh/downloads?product=broker
官方文档:https://docs.emqx.cn/enterprise/v4.3/

注意:产品部署建议 Linux 服务器,不推荐 Windows 服务器。我们这里使用docker 进行安装

如果你不知道怎么使用docker可以参考一下内容:
https://blog.csdn.net/a123123sdf/category_11081930.html

  1. 搜索镜像

    [root@iz2zedg4ylq9iqtwm11wecz ~]# docker search emqx
    INDEX       NAME                                    DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    docker.io   docker.io/emqx/emqx                     An Open-Source, Cloud-Native, Massive-Scal...   126
    docker.io   docker.io/emqx/emqx-ee                  EMQ X Enterprise - Cloud-Native IoT Messag...   8
    docker.io   docker.io/emqx/emqx-edge                EMQ X Broker - Massively Scalable MQTT Mes...   2
    docker.io   docker.io/emqx/kuiper                   A lightweight IoT edge analytics software ...   2
    docker.io   docker.io/emqx/kuiper-manager                                                           2
    docker.io   docker.io/emqx/edge-manager                                                             1
    docker.io   docker.io/emqx/neuron                   Neuron - Industrial IoT Gateway Software f...   1
    docker.io   docker.io/raymondmm/emqx                                                                1
    docker.io   docker.io/alpine/emqx                   old versions of emqx (https://github.com/e...   0
    
  2. 拉取镜像

    [root@iz2zedg4ylq9iqtwm11wecz ~]# docker pull docker.io/emqx/emqx
    Using default tag: latest
    Trying to pull repository docker.io/emqx/emqx ...
    latest: Pulling from docker.io/emqx/emqx
    e519532ddf75: Pull complete
    3b27d5f517c7: Pull complete
    f859fdd14890: Pull complete
    f547136f53b1: Pull complete
    3b98da427992: Pull complete
    580d982288df: Pull complete
    d9267f25196b: Pull complete
    Digest: sha256:0f5db8f114f051a89f1d9ec4364773be853508a08c305da9e2a89844ef967086
    
  3. 开发端口号
    注意:如果你使用的是阿里云的服务器,那么你需要开发阿里云的端口号和服务器本机的端口号
    1883、 8083、 8883 、 8084 、 18083

Broker TCP 端口: 1883
Broker SSL 端口: 8883
emqx dashboard 需要的端口号:18083
emqx 自带的客户端端口号:8083


  1. 运行镜像生产容器
# 先运行一个容器
[root@iz2zedg4ylq9iqtwm11wecz etc]# docker run  --name myemqx -p 1883:1883 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083  -d dc9ce1aa4b05
a226549fa8d75b1673904e1389e74e2f810a80f987729625a0e0137f6048bc7c
# 进入容器
[root@iz2zedg4ylq9iqtwm11wecz etc]# docker exec -it myemqx /bin/bash
bash-5.0$ pwd
/opt/emqx
bash-5.0$ ls
bin          data         erts-11.1.8  etc          lib          log          releases
bash-5.0$ cd etc/
bash-5.0$ ls
acl.conf       certs          emqx.conf      lwm2m_xml      plugins        psk.txt        ssl_dist.conf  vm.args
bash-5.0$ pwd
/opt/emqx/etc
bash-5.0$ exit
# 将需要挂载的配置文件复制到宿主主机中
[root@iz2zedg4ylq9iqtwm11wecz conf]# pwd
/my/emqx/conf
[root@iz2zedg4ylq9iqtwm11wecz conf]# docker cp myemqx:/opt/emqx/etc .
[root@iz2zedg4ylq9iqtwm11wecz conf]# cd etc
[root@iz2zedg4ylq9iqtwm11wecz etc]# ls
acl.conf  certs  emqx.conf  lwm2m_xml  plugins  psk.txt  ssl_dist.conf  vm.args
[root@iz2zedg4ylq9iqtwm11wecz etc]# pwd
/my/emqx/conf/etc
# 删除容器
[root@iz2zedg4ylq9iqtwm11wecz conf]# docker rm myemqx -f
myemqx
# 再新建一个容器
[root@iz2zedg4ylq9iqtwm11wecz conf]# docker run  --name myemqx -p 1883:1883 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 -v /my/emqx/conf/etc:/opt/emqx/etc -d dc9ce1aa4b05
cc4e2017defe03705a331d0b73197079329abdc51d697972da5c4003189b8010

注意:这里目录挂载的是整个文件夹,因此需要确保,宿主主机和容器的etc目录下文件的数量和名字保持一致,也就是文件结构需要一样吗,文件写的内容可以不一样。因此,我们需要先运行一个不需要挂载目录的容器,将容器中etc目录的内容通过docker cp 复制到宿主主机中。再删除容器,最后再docker run 一个新的容器

  1. 测试
    浏览器输入:http://39.96.52.225:18083/

默认登录账号密码为:默认用户名是 admin ,密码是 public 。

(二)集群

可以参照官方文档进行搭建集群

三、Websocket发布与订阅

使用EMQX的Websocket实现发布与订阅消息

  1. 连接Websocket

  2. 订阅消息

  3. 发布消息

  4. 通过EMQX Broker进行收发消息

MQTT——EMQX学习笔记01——EMQX安装使用相关推荐

  1. PHP学习笔记01: 安装PHP开发套件xampp

    PHP学习笔记01: 安装PHP开发套件xampp 1.从网上下载xampp7.3.7 2.安装xampp

  2. ROS学习笔记01:安装ROS - 玩小海龟

    文章目录 一.ROS是何物 二.在Ubuntu上安装ROS (一)设置ROS下载源 (二)安装ROS全套组件 (三)配置环境变量 (四)下载其它功能组件 (五)ROSDEP初始化 (六)ROSDEP更 ...

  3. Rational Rose学习笔记01:安装与注册

    文章目录 一.Rational Rose 2003概述 二.安装Rational Rose 2003 (一)下载Rational Rose 2003 (二)安装Rational Rose 2003 三 ...

  4. 安卓学习笔记01:安装集成开发环境Android Studio

    文章目录 一.Android Studio概述 二.下载Android Studio 1.Android Studio下载地址 2.Android Studio下载步骤 三.安装Android Stu ...

  5. Flask学习笔记01:安装Flask模块与入门案例

    文章目录 一.安装flask模块 1.安装Flask模块 2.在Python里查看Flask版本 二.案例演示--HelloWorld<

  6. MySQL学习笔记01【数据库概念、MySQL安装与使用】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  7. Tomcat学习笔记01【Web相关概念、Tomcat基本操作】

    Java后端 学习路线 笔记汇总表[黑马程序员] Tomcat学习笔记01[Web相关概念.Tomcat基本操作][day01] Tomcat学习笔记02[Tomcat部署项目][day01] 目录 ...

  8. HTML/CSS学习笔记01【概念介绍、基本标签】

    w3cschool菜鸟教程.CHM(腾讯微云):https://share.weiyun.com/c1FaX6ZD HTML/CSS学习笔记01[概念介绍.基本标签.表单标签][day01] HTML ...

  9. JDBC学习笔记01【JDBC快速入门、JDBC各个类详解、JDBC之CRUD练习】

    黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...

最新文章

  1. Twitter 禁止未经用户同意分享照片和视频
  2. 关于虚函数的两个例子
  3. Jmeter常见问题(转)
  4. 想要做服务类APP,先来看看独立商城系统开发方案
  5. Topshelf创建Windows服务
  6. linux 磁盘uuid获取
  7. anaconda base环境_Mac系统下借助Anaconda为jupyter notebook添加多个python内核及相关操作...
  8. ADO.Net之SqlConnection、 Sqlcommand的应用(读书笔记1)
  9. gwr模型用什么做_干货|教你如何用Stata做二元选择模型
  10. java poi excel 图表_Java用POI实现根据Excel表格模板生成新的Excel并实现数据输出
  11. 计组_指令周期/机器周期(cpu周期)/时钟周期(节拍T) 主频超频/cpu频率发热
  12. 用nodejs实现httpserver服务
  13. c语言如何统计不同分数段学生人数,Excel统计不同班级各个分数段的学生人数的方法...
  14. 2019湖北省赛网络赛C Store CDQ分治
  15. 开源商城WSTMart支付开发研究[转]
  16. 清理Maven仓库冗余文件(lastUpdated、m2e-lastUpdated.properties、空文件夹)脚本
  17. 服务器搭建网站:出现503是什么意思?怎么排查?
  18. 完整dm368打印信息
  19. 有生之年转ta系列4pc手机图形api介绍
  20. 重要接口部件——SRAM

热门文章

  1. css动画走马灯5秒,css3 transition 和 animation实现走马灯
  2. 一元操作符、强制类型转换表达式、乘除操作符、加法操作符、移位操作符、关系操作符、判等操作符、位操作符与逻辑操作符、条件与操作符、条件或操作符--运算机制与返回值
  3. GO语言格式化输出占位符
  4. 学生宿舍管理项目开发计划书_学生宿舍管理系统项目计划书.doc
  5. 《海边的卡夫卡》书评
  6. 浏览器上享受《速度与激情》,开发者花 16 个月用 JavaScript 造了一款驾驶游戏,水里也能开车!
  7. ERC721:全生命周期精析,妈妈再也不用担心我不会玩NFT合约啦
  8. 计算机鼠标由传感器来监视,2020年人教版九年级物理全册:16.4“变阻器”过关检测练习题D卷...
  9. unity3d 中控制手机前后摄像头切换
  10. 玩游戏计算机虚拟内存怎么设置,玩游戏时提示虚拟内存太小怎么办