MQTT 您所在的位置:网站首页 EMX安装教程 MQTT

MQTT

2024-01-21 00:18| 来源: 网络整理| 查看: 265

目录标题 一、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),确保消息到达,但消息重复可能会发生。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进行收发消息 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有