MQTT——EMQX学习笔记01——EMQX安装使用
目录标题
- 一、MQTT协议介绍
- (一)什么是MQTT
- (二)MQTT角色组成
- (三)三种消息发布服务质量:QoS
- (四)消息的组成
- (五) MQTT协议数据包结构
- 二、安装EMQX
- (一)安装单机版
- (二)集群
- 三、Websocket发布与订阅
一、MQTT协议介绍
(一)什么是MQTT
MQTT 是基于 Publish/Subscribe(发布/订阅
) 模式的物联网通信协议,凭借简单易实现、支持 QoS、报文小等特点,占据了物联网协议的半壁江山。
简单来说:MQTT是一种通讯协议,不能直接使用,如果需要使用这个协议就需要使用实现了这种协议的组件,比如:EMQX 。
推荐观看:MQTT中文文档
(二)MQTT角色组成
服务端(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客户端(消费者【订阅】、生产者【发布】)
- 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
搜索镜像
[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
拉取镜像
[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
开发端口号
注意:如果你使用的是阿里云的服务器,那么你需要开发阿里云的端口号和服务器本机的端口号
1883、 8083、 8883 、 8084 、 18083
Broker TCP 端口: 1883
Broker SSL 端口: 8883
emqx dashboard 需要的端口号:18083
emqx 自带的客户端端口号:8083
- 运行镜像生产容器
# 先运行一个容器
[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 一个新的容器
- 测试
浏览器输入:http://39.96.52.225:18083/
默认登录账号密码为:默认用户名是 admin ,密码是 public 。
(二)集群
可以参照官方文档进行搭建集群
三、Websocket发布与订阅
使用EMQX的Websocket实现发布与订阅消息
连接Websocket
订阅消息
发布消息
通过EMQX Broker进行收发消息
MQTT——EMQX学习笔记01——EMQX安装使用相关推荐
- PHP学习笔记01: 安装PHP开发套件xampp
PHP学习笔记01: 安装PHP开发套件xampp 1.从网上下载xampp7.3.7 2.安装xampp
- ROS学习笔记01:安装ROS - 玩小海龟
文章目录 一.ROS是何物 二.在Ubuntu上安装ROS (一)设置ROS下载源 (二)安装ROS全套组件 (三)配置环境变量 (四)下载其它功能组件 (五)ROSDEP初始化 (六)ROSDEP更 ...
- Rational Rose学习笔记01:安装与注册
文章目录 一.Rational Rose 2003概述 二.安装Rational Rose 2003 (一)下载Rational Rose 2003 (二)安装Rational Rose 2003 三 ...
- 安卓学习笔记01:安装集成开发环境Android Studio
文章目录 一.Android Studio概述 二.下载Android Studio 1.Android Studio下载地址 2.Android Studio下载步骤 三.安装Android Stu ...
- Flask学习笔记01:安装Flask模块与入门案例
文章目录 一.安装flask模块 1.安装Flask模块 2.在Python里查看Flask版本 二.案例演示--HelloWorld<
- MySQL学习笔记01【数据库概念、MySQL安装与使用】
MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...
- Tomcat学习笔记01【Web相关概念、Tomcat基本操作】
Java后端 学习路线 笔记汇总表[黑马程序员] Tomcat学习笔记01[Web相关概念.Tomcat基本操作][day01] Tomcat学习笔记02[Tomcat部署项目][day01] 目录 ...
- HTML/CSS学习笔记01【概念介绍、基本标签】
w3cschool菜鸟教程.CHM(腾讯微云):https://share.weiyun.com/c1FaX6ZD HTML/CSS学习笔记01[概念介绍.基本标签.表单标签][day01] HTML ...
- JDBC学习笔记01【JDBC快速入门、JDBC各个类详解、JDBC之CRUD练习】
黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...
最新文章
- Twitter 禁止未经用户同意分享照片和视频
- 关于虚函数的两个例子
- Jmeter常见问题(转)
- 想要做服务类APP,先来看看独立商城系统开发方案
- Topshelf创建Windows服务
- linux 磁盘uuid获取
- anaconda base环境_Mac系统下借助Anaconda为jupyter notebook添加多个python内核及相关操作...
- ADO.Net之SqlConnection、 Sqlcommand的应用(读书笔记1)
- gwr模型用什么做_干货|教你如何用Stata做二元选择模型
- java poi excel 图表_Java用POI实现根据Excel表格模板生成新的Excel并实现数据输出
- 计组_指令周期/机器周期(cpu周期)/时钟周期(节拍T) 主频超频/cpu频率发热
- 用nodejs实现httpserver服务
- c语言如何统计不同分数段学生人数,Excel统计不同班级各个分数段的学生人数的方法...
- 2019湖北省赛网络赛C Store CDQ分治
- 开源商城WSTMart支付开发研究[转]
- 清理Maven仓库冗余文件(lastUpdated、m2e-lastUpdated.properties、空文件夹)脚本
- 服务器搭建网站:出现503是什么意思?怎么排查?
- 完整dm368打印信息
- 有生之年转ta系列4pc手机图形api介绍
- 重要接口部件——SRAM
热门文章
- css动画走马灯5秒,css3 transition 和 animation实现走马灯
- 一元操作符、强制类型转换表达式、乘除操作符、加法操作符、移位操作符、关系操作符、判等操作符、位操作符与逻辑操作符、条件与操作符、条件或操作符--运算机制与返回值
- GO语言格式化输出占位符
- 学生宿舍管理项目开发计划书_学生宿舍管理系统项目计划书.doc
- 《海边的卡夫卡》书评
- 浏览器上享受《速度与激情》,开发者花 16 个月用 JavaScript 造了一款驾驶游戏,水里也能开车!
- ERC721:全生命周期精析,妈妈再也不用担心我不会玩NFT合约啦
- 计算机鼠标由传感器来监视,2020年人教版九年级物理全册:16.4“变阻器”过关检测练习题D卷...
- unity3d 中控制手机前后摄像头切换
- 玩游戏计算机虚拟内存怎么设置,玩游戏时提示虚拟内存太小怎么办