EMQ X R3.0 (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 语言平台开发,支持大规模连接和分布式集群,发布订阅模式的开源 MQTT 消息服务器。

MQTT是什么

MQTT是一个由IBM主导开发的物联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。它的核心设计思想是开源、可靠、轻巧、简单,具有以下主要的几项特性:

  1. 非常小的通信开销(最小的消息大小为 2 字节);
  2. 支持各种流行编程语言(包括C,Java,Ruby,Python 等等)且易于使用的客户端;
  3. 支持发布 / 预定模型,简化应用程序的开发;
  4. 提供三种不同消息传递等级,让消息能按需到达目的地,适应在不稳定工作的网络传输需求。

emqx提供了三种消息发布服务质量

Quality of Service等级是发送与接收端的一种关于保证交付信息的协议。一共有3 个QoS 等级:

(1)  "至多一次0",消息发布完全依赖底层TCP/IP 网络,会发生消息丢失或者重复,这一级别可用于如下情况,环境,传感器数据,丢失一次度记录无所谓,因为不久之后会有第二次发送

(2)"至少一次1" 确保消息到达,但消息重复可能发生

(3)  “只有一次2",确保消息到达一次,这一级别可用于如下情况,在计费系统中,消息重复或者丢失导致不正确的结果

EMQ离线消息

(1) 保留消息 MQTT客户端向服务器发布(PUBLISH)消息时,可以设置保留消息(Retained Message)标志。保留消息(Retained Message)会驻留在消息服务器,后来的订阅者订阅主题时仍可以接收该消息。 例如mosquitto命令行发布一条保留消息到主题’a/b/c’: mosquitto_pub -r -q 1 -t a/b/c -m 'hello' 之后连接上来的MQTT客户端订阅主题’a/b/c’时候,仍可收到该消息: $ mosquitto_sub -t a/b/c -q 1 hello 保留消息(Retained Message)有两种清除方式: 客户端向有保留消息的主题发布一个空消息: mosquitto_pub -r -q 1 -t a/b/c -m '' 消息服务器设置保留消息的超期时间。

(2) cleanSession 清理回话 MQTT客户端向服务器发起CONNECT请求时,可以通过’Clean Session’标志设置会话。 ‘Clean Session’设置为0,表示创建一个持久会话,在客户端断开连接时,会话仍然保持并保存离线消息,直到会话超时注销。 ‘Clean Session’设置为1,表示创建一个新的临时会话,在客户端断开时,会话自动销毁。

ACL鉴权

实际场景,我们需要监听每一台设备的链接和断开事件等EMQ的系统行为,这样的事件当然不是任何一个连接到服务器的终端,这样的限制就是ACL鉴权,官方也提供了默认的鉴权,在 /usr/local/emqttd/etc/acl.conf 下,默认值允许127.0.0.1的IP地址链接监听系统主题。

官方提供如下方式来进行用户和ACL验证的存储:

  • 配置文件和命令
  • LDAP
  • HTTP
  • MySQL
  • Postgre
  • Redis
  • MongoDB

可以采用大家经常用到的MYSQL作为鉴权的数据来源,首先先关闭匿名认证(默认是开启的谁都能够登录)

Nginx TCP/SSL 反向代理设置

mkdir -p /usr/local/nginx/tcp.d/

cat <<- 'EOF' >> /usr/local/nginx/nginx.conf
include /usr/local/nginx/tcp.d/*.conf;
EOF

vim emqx_tcp_nginx.conf

stream
{
log_format proxy '$remote_addr [$time_local] ''$protocol $status $bytes_sent $bytes_received ''$session_time "$upstream_addr" ''"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';access_log /var/log/nginx/tcp-access.log proxy ;open_log_file_cache off;
upstream mqtt1883 {#zone tcp_servers 64k;#hash $remote_addr;server 192.168.1.10:1883 weight=1;server 192.168.1.13:1883 weight=1;
}
server {listen       1883;proxy_send_timeout 2h;proxy_read_timeout 2h;proxy_connect_timeout 150s;proxy_timeout 150s;proxy_pass mqtt1883;proxy_buffer_size 3M;tcp_nodelay on;
}
}

EMQ 监控指标

关于监控,官方产品已经提供了dashboard监控面板,已经把重点需要关注的数据进行了上报,现在还需要思考一个问题,就是关于异常的告警处理。

异常数据需要有告警通知功能,比如可以使用zabbix自定义插件把重点的指标进行上报,监控告警的考虑整理如下:
(1)通用项监控,内存,硬盘,cpu,io,网络,进程,端口等
(2)emqx集群状态监控,如集群里面主机节点的健康状态
(3)重点业务指标的监控
Received---收到的消息数
Sent---发出的消息数
Dropped---丢失的消息数(在收到消息后,该消息无人订阅)
Retained---保留的消息数

控制面板里面有一些参数需要关注:
这里看到一片文章介绍很详细 《EMQ 管理控制台功能简介》https://www.jianshu.com/p/ae76ac570f51

如果 EMQ 安装在本机,则使用浏览器打开地址 http://127.0.0.1:18083 ,输入默认用户名 admin 与默认密码 public ,登录进入 Dashboard。如果忘记了管理控制台密码,使用 管理命令 重置或新建管理账号。

罗列一些重要的指标

Received---接收到的MQTT报文数
Sent---发送的MQTT报文数
Connect---几次MQTT连接
Connack---几次MQTT确认连接请求
Disconnect---几次MQTT连接断开
Pingreq---ping request 个数,在一个心跳周期内,客户端会发送一条pingreq到服务端
Pingresq---ping response 个数,服务端收到pingreq的请求之后,会立即响应一个两个字节固定格式的pingresq消息
Published/received---收到的Published报文个数
Published/sent---发送的Published报文个数
Puback/received---收到的Puback报文个数
Puback/sent---发送的Puback报文个数
Puback/missed---没收到的Puback报文个数
Pubcomp/received---收到的Pubcomp报文个数
Pubcomp/sent---发送的Pubcomp报文个数
Pubcomp/missed---失去的Pubcomp报文个数
Pubrec/received---收到的Pubrec报文个数
Pubrec/sent---发送的Pubrec报文个数
Pubrec/missed---失去的Pubrec报文个数
Pubrel/received---收到的Pubrel报文个数
Pubrel/sent---发送的Pubrel报文个数
Pubrel/missed---失去的Pubrel报文个数
Subscribe---发送的订阅数
Suback---发送返回的订阅数
Unsubscribe---发送的取消订阅数
Unsuback---发送返回的取消订阅数The message data  消息数Received---收到的消息数
Sent---发出的消息数
Dropped---丢失的消息数(在收到消息后,该消息无人订阅)
Retained---保留的消息数
Qos0/received---收到的qos0消息数
Qos0/sent---发送的qos0消息数
Qos1/received---收到的qos1消息数
Qos1/sent---发送的qos1消息数
Qos2/received---收到的qos2消息数
Qos2/sent---发送的qos2消息数
Qos2/dropped---丢失的qos2消息数The bytes data  流量收发统计(字节)Received---收到的流量字节
Sent---发送的流量字节

任意节点上使用 ./bin/emqttd_ctl cluster status 命令查询集群状态:

Cluster status: [{running_nodes,['emqx@192.168.233.111','emqx@192.168.233.112','emqx@192.168.233.113']}]

centos7安装emqtt_benchmark压力测试工具:

之前测试遇到了超多的坑,相信超多小伙伴也遇到了相同的问题,现将完整的安装内容整理如下,直接复制执行即可。

=====================直接复制快速安装=================================

cd /opt
wget http://erlang.org/download/otp_src_21.0.tar.gz
git clone https://github.com/erlang/rebar3.git
git clone https://github.com/emqtt/emqtt_benchmark.gityum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel perl
tar xf otp_src_21.0.tar.gz
cd otp_src_21.0
./configure --prefix=/usr/local/erlang --without-javac
make && make install echo "export PATH=/usr/local/erlang/bin:$PATH" >>/etc/profile
echo "export PATH=/opt/rebar3:$PATH" >>/etc/profile
. /etc/profilecd /opt/rebar3/
./bootstrapcd /opt/emqtt_benchmark/
make
./emqtt_bench_sub --help

=========================安装说明=====================================
统一软件下载路径 /opt

cd /opt
wget http://erlang.org/download/otp_src_21.0.tar.gz

yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel perl
tar xf otp_src_21.0.tar.gz
cd otp_src_21.0
./configure --prefix=/usr/local/erlang --without-javac
make && make install

添加环境变量

echo "export PATH=/usr/local/erlang/bin:$PATH" >>/etc/profile
. /etc/profile

验证erlang环境是否ok
执行验证:erl
再次执行:crypto:start().

还需要安装rebar3:
cd /opt
git clone https://github.com/erlang/rebar3.git
cd /opt/rebar3/
./bootstrap

以及添加环境变量
echo "export PATH=/opt/rebar3:$PATH" >>/etc/profile
. /etc/profile

压测工具下载编译
git clone https://github.com/emqtt/emqtt_benchmark.git

cd /opt/emqtt_benchmark/
make
./emqtt_bench_sub --help

EMQTT benchmark测试参数说明:
https://www.cnblogs.com/saryli/p/9794640.html

转载于:https://blog.51cto.com/12083623/2379707

初识emqx消息服务器相关推荐

  1. emqx—mqtt消息服务器

    EMQ X 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器,重点是专业支持MQTT协议,(MQTT 是轻量的 (Lightweight).发布订阅模式 (PubSub) 的物 ...

  2. Java物联网开发(二) —— 开源百万级分布式 MQTT 消息服务器EMQX

    开源百万级分布式 MQTT 消息服务器EMQX 一. 是什么 1. 简介 2. 分类 3. EMQ X 消息服务器功能列表 二. 安装 1. 安装方式 rpm安装 docker安装 免安装 2. 目录 ...

  3. 图文手把手教程--ESP32 MQTT对接EMQX本地服务器(VSCODE+ESP-IDF)

    本文内容 1)使用MQTT_TCP例程,ESP32通过MQTT协议与MQTT本地服务器(EMQX)进行通信. 2)如何搭建EMQX MQTT本地服务器. 3)如何使用MQTT.fx客户端调试工具或MQ ...

  4. 在阿里云 ACK 上部署 EMQX MQTT 服务器集群

    云进入以「应用为中心」的云原生阶段,Operator 模式的出现,则为 Kubernetes 中的自动化任务创建配置与管理提供了一套行之有效的标准规范.通过将运维知识固化成高级语言 Go/Java 代 ...

  5. 在华为云 CCE 上部署 EMQX MQTT 服务器集群

    云进入以「应用为中心」的云原生阶段,Operator 模式的出现,则为 Kubernetes 中的自动化任务创建配置与管理提供了一套行之有效的标准规范.通过将运维知识固化成高级语言 Go/Java 代 ...

  6. EMQ 边缘消息服务器管理套件 EMQ X Storm 发布

    继 2019 年 1 月 25 日 EMQ 首款边缘计算产品 EMQ X Edge (EMQ X 边缘消息服务器)发布之后,4 月 19 日 EMQ 发布了一个与 EMQ X Edge 协同工作的新产 ...

  7. EMQ 边缘消息服务器管理套件 EMQ X Storm 发

    继 2019 年 1 月 25 日 EMQ 首款边缘计算产品 EMQ X Edge (EMQ X 边缘消息服务器)发布之后,4 月 19 日 EMQ 发布了一个与 EMQ X Edge 协同工作的新产 ...

  8. 阿里云下Ubuntu18.04安装部署EMQ X 消息服务器

    EMQ X服务器简介 EMQ X (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器. EMQ X ...

  9. 物联网实战-基于开源 MQTT消息服务器EMQ X

    物联网协议对比 对于物联网,最重要的是在互联网中设备与设备的通讯,现在物联网在internet通信中比较常见的通讯协议包括:HTTP.websocket.XMPP.COAP.MQTT HTTP和web ...

  10. EMQX MQTT服务器 Windows部署

    EMQX MQTT服务器 Windows部署 MQTT协议 EMQX 平台 EMQX MQTT部署 说明 由于我正在着手的物联网项目需要进行通信,我在各种通信协议中进行比较.蓝牙等通信协议功耗太高,而 ...

最新文章

  1. python怎样定义一个数组_Python创建数组
  2. 《人人都是产品经理》阅读笔记一
  3. couldn't register *** with the bootstrap server. Error: unknown error code.
  4. Dijstra算法求最短路径
  5. 隐马尔科夫模型-EM模型-混合理解
  6. 北方人思想为什么落后_广西人为什么很少到北方打工?
  7. 2019手机号码正则表达式
  8. python读取文件名有中文_[请教]python的中文文件名处理
  9. 钱放在支付宝好,还是微信好,还是存在银行好?
  10. CentOS/Ubuntu 下 FTP 服务器(vsftpd)的安装
  11. JavaMail实践--实现邮件发送
  12. 第二季-专题13-NandFlash变硬盘
  13. go reflection
  14. 手机连上蓝牙耳机没有声音
  15. Android kotlin和java反编译后的smali 有什么区别?
  16. 将win7电脑无线网变身WiFi热点,让手机、笔记本共享上网
  17. 什么是SDK? {转载}
  18. 重装系统win7教程
  19. java中宏定义,宏定义的使用
  20. 手机视频剪辑软件哪个会比较好用?

热门文章

  1. 每天一个linux命令——cat
  2. napa与matlab,纳帕谷产区Napa Valley|酒斛网 - 与数十万葡萄酒爱好者一起发现美酒,分享微醺的乐趣...
  3. Win10系统怎么注销微软账户
  4. 搜狗收录查询工具,搜狗收录就应该这么做
  5. 方差分解分析 (VPA):定量不同环境因子对群落变化的解释比例
  6. 2005年国内最有份量的资源下载网站一览
  7. 正态分布的概率密度函数 python_多元正态分布概率密度函数的三维绘图
  8. html箭头轮播,CSS-用伪类制作小箭头(轮播图的左右切换btn)
  9. [极客时间] 时间复杂度和空间复杂度分析
  10. 怎么选最快dns服务器,dns设置(dns设置哪个最好最快)