初识EMQX与安装

2022-11-07 15:02:59 浏览数 (2)

1、EMQX简介

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

1.1 EMQX是什么?

EMQ X 基于 Erlang/OTP 平台开发的 MQTT 消息服务器,是开源社区中最流行的 MQTT 消息服务器。EMQ X 是开源百万级分布式 MQTT 消息服务器(MQTT Messaging Broker),用于支持各种接入标准 MQTT 协议的设备,实现从设备端到服务器端的消息传递,以及从服务器端到设备端的设备控制消息转发。从而实现物联 网设备的数据采集,和对设备的操作和控制。

1.2 为什么选择EMQX

到目前为止,比较流行的 MQTT Broker 有几个:

1、Eclipse Mosquitto: GitHub - eclipse/mosquitto: Eclipse Mosquitto - An open source MQTT broker 使用 C 语言实现的 MQTT Broker。Eclipse 组织还还包含了大量的 MQTT 客户端项目: Eclipse Paho | The Eclipse Foundation 。

2、EMQX: GitHub - emqx/emqx: An Open-Source, Cloud-Native, Distributed MQTT Message Broker for IoT. 使用 Erlang 语言开发的 MQTT Broker,支持许多其他 IoT 协议比如 CoAP、LwM2M 等 。

3、Mosca: GitHub - moscajs/mosca: MQTT broker as a module 使用 Node.JS 开发的 MQTT Broker,简单易用。

4、VerneMQ: GitHub - vernemq/vernemq: A distributed MQTT message broker based on Erlang/OTP. Built for high quality & Industrial use cases. 同样使用 Erlang 开发的 MQTT Broker。

从支持 MQTT5.0、稳定性、扩展性、集群能力等方面考虑,EMQX 的表现应该是最好的。

与别的MQTT服务器相比EMQ X 主要有以下的特点:

  • 经过100 版本的迭代,EMQ X 目前为开源社区中最流行的 MQTT 消息中间件,在各种客户严格的生产环 境上经受了严苛的考验;
  • EMQ X 支持丰富的物联网协议,包括 MQTT、MQTT-SN、CoAP、 LwM2M、LoRaWAN 和WebSocket 等;
  • 优化的架构设计,支持超大规模的设备连接。企业版单机能支持百万的 MQTT 连接;集群能支持千万级别的 MQTT 连接;
  • 易于安装和使用;
  • 灵活的扩展性,支持企业的一些定制场景;
  • 中国本地的技术支持服务,通过微信、QQ等线上渠道快速响应客户需求;
  • 基于 Apache 2.0 协议许可,完全开源。EMQ X 的代码都放在 Github 中,用户可以查看所有源代码。
  • EMQ X 3.0 支持 MQTT 5.0 协议,是开源社区中第一个支持 5.0协议规范的消息服务器,并且完全兼容 。
  • MQTT V3.1 和 V3.1.1 协议。除了 MQTT 协议之外,EMQ X 还支持别的一些物联网协议 。
  • 单机支持百万连接,集群支持千万级连接;毫秒级消息转发。EMQ X 中应用了多种技术以实现上述功能:

1、利用 Erlang/OTP 平台的软实时、高并发和容错(电信领域久经考验的语言) 2、全异步架构 3、连接、会话、路由、集群的分层设计 4、消息平面和控制平面的分离等

  • 扩展模块和插件,EMQ X 提供了灵活的扩展机制,可以实现私有协议、认证鉴权、数据持久化、桥接转发和管理控制台等的扩展
  • 桥接:EMQ X 可以跟别的消息系统进行对接,比如 EMQ X Enterprise 版本中可以支持将消息转发到Kafka、RabbitMQ 者别的 EMQ 节点等
  • 共享订阅:共享订阅支持通过负载均衡的方式在多个订阅者之间来分发 MQTT 消息。比如针对物联网等数据采集场景,会有比较多的设备在发送数据,通过共享订阅的方式可以在订阅端设置多个订阅者来实现这几个订阅者之间的工作负载均衡

1.3 EMQ X 与物联网平台的关系是什么

典型的物联网平台包括设备硬件、数据采集、数据存储、分析、Web / 移动应用等。EMQ X 位于数据采集这 一层,分别与硬件和数据存储、分析进行交互,是物联网平台的核心:前端的硬件通过 MQTT 协议与位于数据采集层的 EMQ X 交互,通过 EMQ X 将数据采集后,通过 EMQ X 提供的数据接口,将数据保存到后台的持久化平台中(各种关系型数据库和 NOSQL 数据库),或者流式数据处理框架等,上层应用通过这些数据分析后得到的结果 呈现给最终用户。

1.4 EMQ X有哪些产品

EMQ X 公司主要提供三个产品,可在官网首页产品导航查看每一种产品;主要体现在支持的连接数量、产品 功能和商业服务等方面的区别:

1、EMQ X Broker:EMQ X 开源版,完整支持 MQTT V3.1.1/V5.0 协议规范,完整支持 TCP、TLS、WebSocket 连接,支持百万级连接和分布式集群架构;LDAP, MySQL, Redis, MongoDB 等扩展插件集成,支持插件模式扩展服务器功能;支持跨 Linux、Windows、macOS 平台安装,支持公有云、私有云、K8S/容器部署

2、EMQ X Enterprise:EMQ X 企业版,在开源版基础上,支持物联网主流协议 MQTT、MQTT-SN、CoAP/LwM2M、HTTP、WebSocket 一站式设备接入;JT-808/GBT-32960 等行业协议支持,基于 TCP/UDP 私有协议的旧网设备接入兼容,多重安全机制与认证鉴权;高并发软实时消息路由;强大灵活的内置规则引 擎;企业服务与应用集成;多种数据库持久化支持;消息变换桥接转发 Kafka;管理监控中心

3、EMQ X Platform:EMQ X 平台版,EMQ X Platform 是面向千万级超大型 IoT 网络和应用,全球首选电信级物联网终端接入解决方案。千万级大容量;多物联网协议;电信级高可靠;卓越 5G 网络支持;跨云跨IDC 部署;兼容历史系统;完善的咨询服务(从咨询到运维) 。

2、安装

产品部署建议 Linux 服务器,不推荐 Windows 服务器。

安装的方式有很多种,可供自由选择:

Shell脚本安装、包管理器安装、二进制包安装、ZIP压缩包安装、Homebrew安装、Docker运行安装、Helm

安装、源码编译安装。

这里我就直接使用Docker 安装了。

1:首先拉取emqx的镜像

代码语言:javascript复制
docker pull emqx/emqx:v4.0.5

2:使用docker命令运行得到docker容器

代码语言:javascript复制
docker run -tid --name emqx -p 1883:1883 -p 8083:8083 -p 8081:8081 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:v4.0.5

EMQ X broker提供了Dashboard 以方便用户管理设备与监控相关指标,启动后我们通过访问服务端18083端口。

地址:http://192.168.58.149:18083 默认用户名:admin,默认密码:public

我们还可以进入容器内部进行查看。

代码语言:javascript复制
#f569d3602ed2 是你的容器id
docker exec -it f569d3602ed2 /bin/sh 

 在这里我们可以看到EMQX的目录结构。

以上目录中,用户经常接触与使用的是 binetcdatalog 目录。

1、bin 目录

emqxemqx.cmdEMQ X 的可执行文件 emqx_ctlemqx_ctl.cmdEMQ X 管理命令的可执行文件

2、etc 目录

EMQ X 通过 etc 目录下配置文件进行设置,主要配置文件包括:

3、data 目录

EMQ X 将运行数据存储在 data 目录下,主要的文件包括: confifigs/app.*.confifig*配置文件

说明

1、etc/emqx.conf :EMQ X 配置文件

2、etc/acl.conf :EMQ X 默认 ACL 规则配置文件

3、etc/plugins/.conf :EMQ X 扩展插件配置文件 ;EMQ X 读取 etc/emqx.conf 和 etc/plugins/.conf 中的配置后,转换为 Erlang 原生配置文件格式,并在运行时读取其中的配置。

4、loaded_plugins:文件记录了 EMQ X 默认启动的插件列表,可以修改此文件以增删默认启动的插件。 loaded_plugins 中启动项格式为 {<Plugin Name>, <Enabled>}. , <Enabled> 字段为布尔类型,EMQ X 会在启 动时根据 <Enabled> 的值判断是否需要启动该插件。

代码语言:javascript复制
$ cat loaded_plugins {emqx_management,true}.
{emqx_recon,true}. 
{emqx_retainer,true}.
{emqx_dashboard,true}. 
{emqx_rule_engine,true}. 
{emqx_bridge_mqtt,false}.

5、mnesia :Mnesia 数据库是 Erlang 内置的一个分布式 DBMS,可以直接存储 Erlang 的各种数据结构。 EMQ X 使用 Mnesia 数据库存储自身运行数据,例如告警记录、规则引擎已创建的资源和规则、Dashbaord 用户信息等数据,这些数据都将被存储在 mnesia 目录下,因此一旦删除该目录,将导致 EMQ X 丢失所有业务数据。 可以通过 emqx_ctl mnesia 命令查询 EMQ X 中 Mnesia 数据库的系统信息。

4、log 目录

  1. emqx.log.**:EMQ X 运行时产生的日志文件
  2. crash.dump:EMQ X 的崩溃转储文件,可以通过 etc/emqx.conf 修改配置。
  3. erlang.log.**:以 emqx start 方式后台启动 EMQ X 时,控制台日志的副本文件。

3、配置说明

EMQ X 的配置文件通常以 .conf 作为后缀名,你可以在 etc 目录找到这些配置文件,主要配置文件包括:

需要注意的是,安装方式不同 etc 目录所处的路径可能不同,

语法规则

  1. 采用类似 sysctl 的 k = v 通用格式
  2. 单个配置项的所有信息都在同一行内,换行意味着创建一个新的配置项
  3. 键可以通过 . 进行分层,支持按树形结构管理配置项
  4. 值的类型可以是 integer , fload , percent , enum , ip , string , atom , flag , duration and
  5. bytesize
  6. 任何以#开头的行均被视为注释

4、客户端websocket消息收发

在EMQ X Broker提供的 Dashboard 中 TOOLS 导航下的 Websocket 页面提供了一个简易但有效的 WebSocket 客户端工具,它包含了连接、订阅和发布功能,同时还能查看自己发送和接收的报文数据,我们期望它可以帮助您快速地完成某些场景或功能的测试验证:

 第一次进入是英文,我们可以设置成中文。

MQTT是为了物联网场景设计的基于TCP的Pub/Sub协议,有许多为物联网优化的特性,比如适应 不同网络的QoS、层级主题、遗言等等。

WebSocket是为了HTML5应用方便与服务器双向通讯而设计的协议,HTTP握手然后转TCP协议, 用于取代之前web服务器推送数据的Server Push、Comet、长轮询等老旧实现。 两者之所有有交集,是因为一个应用场景:如何通过HTML5应用来作为MQTT的客户端,以便接受设备 消息或者向设备发送信息

0 人点赞