MQTT——EMQX学习笔记01——EMQX安装使用
作者:互联网
目录标题
一、MQTT协议介绍
(一)什么是MQTT
MQTT 是基于 Publish/Subscribe(发布/订阅
) 模式的物联网通信协议,凭借简单易实现、支持 QoS、报文小等特点,占据了物联网协议的半壁江山。
简单来说:MQTT是一种通讯协议,不能直接使用,如果需要使用这个协议就需要使用实现了这种协议的组件,比如:EMQX 。
(二)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进行收发消息
标签:01,conf,MQTT,io,emqx,EMQX,docker 来源: https://blog.csdn.net/a123123sdf/article/details/120902585