• EMQ X:初体验


    简介

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

    EMQ官网:https://www.emqx.com/zh/products/emqx

    EMQ X 基于 Erlang/OTP 平台开发的 MQTT 消息服务器,是开源社区中最流行的 MQTT 消息服务器。

    image-20210726164003412

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

    为什么选择EMQ X

    到目前为止,比较流行的 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

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

    • EMQ X 支持丰富的物联网协议,包括 MQTT、MQTT-SN、CoAP、 LwM2M、LoRaWAN 和 WebSocket 等;

    • 优化的架构设计,支持超大规模的设备连接。企业版单机能支持百万的 MQTT 连接;集群能支持千万级 别的 MQTT 连接;

    • 易于安装和使用;

    • 灵活的扩展性,支持企业的一些定制场景;

    • EMQ X 3.0 支持 MQTT 5.0 协议,是开源社区中第一个支持 5.0协议规范的消息服务器,并且完全兼容 MQTT V3.1 和 V3.1.1 协议。除了 MQTT 协议之外,EMQ X 还支持别的一些物联网协议

    • 单机支持百万连接,集群支持千万级连接;毫秒级消息转发。EMQ X 中应用了多种技术以实现上述功能

    • 扩展模块和插件,EMQ X 提供了灵活的扩展机制,可以实现私有协议、认证鉴权、数据持久化、桥接转发和管理控制台等的扩展

    • 桥接:EMQ X 可以跟别的消息系统进行对接,比如 EMQ X Enterprise 版本中可以支持将消息转发到 Kafka、RabbitMQ 或者别的 EMQ 节点等

    • 共享订阅:共享订阅支持通过负载均衡的方式在多个订阅者之间来分发 MQTT 消息。比如针对物联网等 数据采集场景,会有比较多的设备在发送数据,通过共享订阅的方式可以在订阅端设置多个订阅者来实现这 几个订阅者之间的工作负载均衡

    EMQ X 产品介绍

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

    • EMQ X Broker:EMQ X 开源版,完整支持 MQTT V3.1.1/V5.0 协议规范,完整支持 TCP、TLS、 WebSocket 连接,支持百万级连接和分布式集群架构;LDAP, MySQL, Redis, MongoDB 等扩展插件集成,支持插件模式扩展服务器功能;支持跨 Linux、Windows、macOS 平台安装,支持公有云、私有云、K8S/容器 部署
    • EMQ X Broker:EMQ X 开源版,完整支持 MQTT V3.1.1/V5.0 协议规范,完整支持 TCP、TLS、 WebSocket 连接,支持百万级连接和分布式集群架构;LDAP, MySQL, Redis, MongoDB 等扩展插件集成,支 持插件模式扩展服务器功能;支持跨 Linux、Windows、macOS 平台安装,支持公有云、私有云、K8S/容器 部署
    • EMQ X Platform:EMQ X 平台版,EMQ X Platform 是面向千万级超大型 IoT 网络和应用,全球首选电 信级物联网终端接入解决方案。千万级大容量;多物联网协议;电信级高可靠;卓越 5G 网络支持;跨云跨 IDC 部署;兼容历史系统;完善的咨询服务(从咨询到运维)

    rpm安装

    wget https://www.emqx.com/zh/downloads/broker/4.3.5/emqx-centos7-4.3.5-amd64.rpm
    sudo yum install emqx-centos7-4.3.5-amd64.rpm -y
    #启动命令
    sudo emqx start
    emqx_ctl status
    

    image-20210726165803592

    安装完成后,emqx会有一个默认的网页控制台,端口为18083,默认账号密码:admin/public

    image-20210726165953467

    image-20210726170005821

    emqx服务停止命令:

    sudo emqx stop
    

    使用websocket进行消息收发案例

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

    image-20210726170612224

    客户端点击连接:

    image-20210726170841814

    点击订阅主题:

    image-20210726170900925

    点击发送消息:

    image-20210726170921128

    EMQ X 目录结构

    不同安装方式得到的 EMQ X 其目录结构会有所不同,具体如下:

    描述 使用 ZIP 压缩包安装 使用二进制包安装 Homebrew(MacOS)安装
    可执行文件目录 ./bin /usr/lib/emqx/bin /usr/local/bin
    数据文件 ./data /var/lib/emqx/data /usr/local/Cellar/emqx/*/data
    Erlang 虚拟机文件 ./erts-* /usr/lib/emqx/erts-* /usr/local/Cellar/emqx/*/erts-
    配置文件目录 ./etc /etc/emqx /usr/local/Cellar/emqx/*/etc
    依赖项目录 ./lib /usr/lib/emqx/lib /usr/local/Cellar/emqx/*/lib
    日志文件 ./log /var/log/emqx /usr/local/Cellar/emqx/*/log
    启动相关的脚本、schema 文件 ./releases /usr/lib/emqx/releases /usr/local/Cellar/emqx/*/releases

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

    bin 目录

    emqx、emqx.cmd

    EMQ X 的可执行文件

    • emqx start

      后台启动 EMQ X Broker;

    • emqx stop

      关闭 EMQ X Broker;

    • emqx restart

      重启 EMQ X Broker;

    • emqx console

      使用控制台启动 EMQ X Broker;

    • emqx foreground

      使用控制台启动 EMQ X Broker,与 emqx console 不同,emqx foreground 不支持输入 Erlang 命令;

    • emqx ping

      Ping EMQ X Broker

    emqx_ctl、emqx_ctl.cmd

    EMQ X 提供了 ./bin/emqx_ctl 的管理命令行,用于用户对 EMQ X 进行管理、配置、查询

    具体可参考:https://docs.emqx.cn/broker/v4.3/advanced/cli.html#status-命令

    etc 目录

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

    配置文件 说明
    emqx.conf EMQ X 配置文件
    acl.conf EMQ X 默认 ACL 规则配置文件
    plugins/*.conf EMQ X 各类插件配置文件
    certs EMQ X SSL 证书文件
    emqx.lic License 文件仅限 EMQ X Enterprise

    data 目录

    EMQ X 将运行数据存储在 data 目录下,主要的文件包括:

    configs/app.*.config

    EMQ X 读取 etc/emqx.confetc/plugins/*.conf 中的配置后,转换为 Erlang 原生配置文件格式,并在运行时读取其中的配置。

    loaded_plugins

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

    $ cat loaded_plugins
    {emqx_management,true}.
    {emqx_recon,true}.
    {emqx_retainer,true}.
    {emqx_dashboard,true}.
    {emqx_rule_engine,true}.
    {emqx_bridge_mqtt,false}.
    

    mnesia

    Mnesia 数据库是 Erlang 内置的一个分布式 DBMS,可以直接存储 Erlang 的各种数据结构。

    EMQ X 使用 Mnesia 数据库存储自身运行数据,例如告警记录、规则引擎已创建的资源和规则、Dashbaord 用户信息等数据,这些数据都将被存储在 mnesia 目录下,因此一旦删除该目录,将导致 EMQ X 丢失所有业务数据。

    可以通过 emqx_ctl mnesia 命令查询 EMQ X 中 Mnesia 数据库的系统信息

    log 目录

    emqx.log.*

    EMQ X 运行时产生的日志文件

    crash.dump

    EMQ X 的崩溃转储文件,可以通过 etc/emqx.conf 修改配置

    erlang.log.*

    emqx start 方式后台启动 EMQ X 时,控制台日志的副本文件。

  • 相关阅读:
    docker – 在容器引擎上定义/ dev / shm的大小
    Redis集群创建
    Go 语言陷阱
    使用python进行视频图片提取
    使用ffmpeg进行视频图片提取
    app端性能测试
    为什么需要分布式ID?你项目中是怎么做的?
    JavaGuide学习记录——java容器
    【追根究底】doCreateBean中为什么会对earlySingletonExposure处理两次
    老板急坏了,公司网站的 HTTPS 过期了,获取免费SSL证书
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/15062376.html
Copyright © 2020-2023  润新知