回到目录    回到末尾

  EMQX为大规模分布式物联网 MQTT 消息服务器。提供高效可靠连接海量物联网设备,实时处理分发消息与事件流数据,助力构建关键业务的物联网平台与应用。

一、卸载

  1. 停止 EMQX Broker服务:emqx stop
    1
  2. 查看状态,确认已停止服务:systemctl status emqx
    1
  3. 卸载:取决于安装方式:
    (1)如果你带有yum,可以直接执行命令:yum remove emqx
    (2)如果是rpm包,则执行命令:rpm -e emqx
    (3)如果是tar包安装,直接删除 EMQX 目录即可 rm -rf emqx目录
    1
  4. 验证是否已经卸载完成:systemctl status emqx

回到目录    回到末尾

二、下载安装

2.1 下载

  1. 下载链接:emqx官网 - 版本下载
  2. 选择合适的版本下载:

希望使用rpm安装的,下载.rpm后缀的安装包;使用tar方式安装的,下载tar.gz安装包。

1

2.2 安装

  安装有2种方式:rpm安装和tar安装

2.2.1 rpm安装

  1. 安装:
    (1)如果你带有yum,可以直接执行命令:yum install 安装包.rpm
    (2)如果是rpm包,则执行命令:rpm -ivh 安装包.rpm --force --nodeps
#示例
rpm -ivh emqx-5.0.9-el7-amd64.rpm --force --nodeps

1

2.2.2 tar安装

这种方式启动和停止比较麻烦,不建议使用

  1. 创建目录:mkdir -p emqx && tar -zxvf 安装包.tar.gz -C emqx
#示例
mkdir -p emqx && tar -zxvf emqx-5.0.11-el7-amd64.tar.gz -C emqx
  1. 直接启动:./emqx/bin/emqx start
  2. 查看状态:bin/emqx_ctl status
  3. 停止 EMQX Broker:./bin/emqx stop

回到目录    回到末尾

2.3 启动测试

2.3.1 启动

  1. 启动emqx:
#执行命令
systemctl start emqx
# 或者
emqx start
  1. 查看启动状态:systemctl status emqx
    1
  2. 如果启动失败,点击参考启动异常及解决方案
  3. 启动成功:
      启动后,打开浏览器:http://IP:18083/
    登录:
默认账号:admin
默认密码:public

1

2.3.2 修改认证信息

登录成功后,会有提示要求修改密码,此时可以自定义设置密码。
2
1

如果访问不了,查看机器防火墙是否打开,该端口是否开放:

  • 查看状态: systemctl status firewalld # active (running) 即是开启状态
  • 查看已开放端口命令:firewall-cmd --list-all
    如果端口18083未开放:
    (1)新增开放端口:firewall-cmd --zone=public --add-port=18083/tcp --permanent
    (2)刷新加载:firewall-cmd --reload

回到目录    回到末尾

三、安装和启动过程中遇到的问题及解决方案

3.1 启动失败 - openssl not found

1
根据提示,我们查看启动失败日志:/usr/bin/emqx console
1
接着我们查看官网-对应常见错误,找到对应的解决办法:
1
详情参考:openssl升级安装
回到目录    回到末尾

3.2 启动失败 - cookie

从waring中可粗略获取的信息为:在服务器配置文件(emqx.conf)中的cookie配置项出现问题:
1
根据提示修改emqx的配置文件emqx.conf
·
修改的值可以用户自定义:
1
最后,重启服务器和emqx。
其他配置问题请查询官方文档:EMQX配置文件语法

回到目录    回到末尾

3.3 No such file or directory问题

load_failed,“Failed to load NIF library /usr/lib/emqx/lib/quicer-0.0.113/priv/libquicer_nif: ‘libatomic.so.1: cannot open shared object file: No such file or directory’”
1
如果报错显示没有这个文件夹或文件,找到电脑上对应名称的文件,并建立软连接到对应位置:

# 找到电脑中对应文件位置
find / -name libatomic.so.1
#建立软链接到 /usr/lib64位置
 ln -sf /usr/lib/emqx/dynlibs/libatomic.so.1 /usr/lib64/libatomic.so.1

1
再重新启动即可。

回到目录    回到末尾

3.4 port 4370 is in use 问题

1
启动时,遇到端口被占用的情况,有两种可能:
(1)检查防火墙是否打开,及对应端口号是否开放
(2)该端口被其他进程占用
针对不同情况的解决方法:

3.4.1 防火墙及端口

  1. 防火墙状态查看:systemctl status firewalld
    (1) # active (running) 即是开启状态
    (2)如果不是active状态,开启防火墙:systemctl start firewalld
  2. 查看端口是否开放:firewall-cmd --query-port=4370/tcp
    (1)yes即是开放状态
    1
    (2)否则开放端口:
#开放端口
firewall-cmd --zone=public --add-port=4370tcp --permanent
#重新加载
firewall-cmd --reload

1
回到目录    回到末尾

3.4.2 杀掉进程

  1. 查看进程占用: ps -ef|grep 4370
    1
  2. 杀掉进程占用:kill -9 进程号pid

以上排查后,再重新启动emqx即可

回到目录    回到末尾

3.5 其他问题

  1. 检查防火墙设置,确定防火墙正确打开,且对应的端口是开放的。emqx监听的端口参照配置文件(emqx.conf)中的配置。
  2. 检查日志文件:在emqx的安装目录下,可以找到logs目录,里面记录了日志文件,如果启动失败了,可以查看日志中的错误信息,帮助确定问题。
  3. 重启服务器和emqx.

回到目录    回到末尾

四、EMQX使用 - 创建规则引擎写入tDengine

  1. 启动emqx:systemctl start emqx
  2. 查看启动状态:systemctl status emqx
  3. 停止emqx:systemctl stop emqx

参考链接:emqx创建规则引擎写入tDengine

接下来演示一个一下emqx的简单使用案例:emqx存储数据到TDEngine数据库的详细配置过程

4.1 创建数据桥接

   数据桥接是用来对接 EMQX 和外部数据系统的通道。外部数据系统可以是 MySQL、MongoDB 等数据库, 也可以是 Kafka,RabbitMQ 等消息中间件,或者是 HTTP 服务器等。
   通过数据桥接,用户可以实时地将消息从 EMQX 发送到外部数据系统,或者从外部数据系统拉取数据并发送到 EMQX 的某个主题。

4.1.1 新建数据桥接 - Webhook

  1. 选择左边栏 “数据集成” - “数据桥接(Data Brige)”,点击新建:
    1
  2. 选择Webhook,点击next:
    3

4.1.2 .配置webhook连接信息

配置请求参数
(1)请求URL是http://tDengine的服务器IP:6041/rest/sql
(2) 请求方式为post
(3)添加 Authorization 请求头作为认证信息。
  Authorization 的值为 Basic + TDengine 的 {username}:{password} 经过 Base64 编码之后的字符串,
Base64 编码的获取方式,可以通过网页去获取:base64在线编码、解码工具

1
tDengin的默认账户和密码是 root:taosdata 编码后为 cm9vdDp0YW9zZGF0YQ==,
实际填入的值为:Basic cm9vdDp0YW9zZGF0YQ==
1
1
填写完成后,单击测试连接查看是否填写正确。
3
4
测试连接成功后,点击create 创建成功。
6
此时弹框提示:
(1)back to bridge list :回到桥接链表界面
(2)create rule:为该连接创建规则
这里一般我们选择create rule(创建关联规则).点击进入关联规则创建
回到目录    回到末尾

4.2 创建规则

  1. 点击规则引擎—》规则—新建
    1
  2. 填写如下,获取主题内容
    1
    3
    我的创建信息如下:
    1

4.3 创建websocket连接测试

  1. 在TDEngine数据库中创建表:collect_equ_status
    1
  2. 使用emqx的websocket工具,连接emqx的mqtt服务
    3
    3
  3. 给主题发送消息,消息内容如下
    3
    我的信息如下:
    1
    1
    在数据库查看数据是否插入成功:
    1

回到目录    回到末尾

五、日志配置及日志追踪

5.1 日志配置

   EMQX支持将日志输出到控制台或者日志文件,或者同时使用两者。MQX 的默认日志级别为 warning,默认在单日志文件超过10MB(log.rotation.size配置)的情况下,滚动日志文件。emqx.log.N 文件里面,包含了 warning 以及 warning 以上的日志消息。

  1. 修改日志配置有两种方式:
  • (1)可在 emqx.conf 中修改,emqx.conf相关日志配置如下:
log.to = file
log.level = warning
log.dir = /var/log/emqx
log.file = emqx.log
log.rotation.size = 10MB
log.rotation.count = 5
  • (2)可以使用EMQX命令行工具emqx_ctl在运行时修改emqx的日志级别,示例如下:
#将全局日志级别primary log level 以及所有 log handlers 的级别设置为debug:
emqx_ctl log set-level debug
#将主日志primary log level 设置为 debug:
emqx_ctl log primary-level debug
#修改某个 log handler的日志级别,如将log handler file设置为 debug:
emqx_ctl log handlers set-level file debug
#启动和停止某个已经的 log handler:
emqx_ctl log handlers start default
emqx_ctl log handlers stop default

log handler 是负责日志处理和输出的工作进程,它由 log handler id 唯一标识,并负责接收什么级别的日志、如何过滤日志消息、将日志输出到什么地方三项任务。

  1. 可以使用命令emqx_ctl log handlers list 查看当前的EMQX服务有哪些日志处理进程。emqx 4.3中安装的 log handlers如下:
$ emqx_ctl log handlers list
LogHandler(id=ssl_handler, level=debug, destination=console, status=started)
LogHandler(id=file, level=warning, destination=/var/log/emqx/emqx.log, status=started)

5.2 日志追踪

EMQX官网 - 日志追踪

   EMQX支持针对ClientID或Topic过滤日志并输出到文件。即我们可以将某个用户或某个主题的日志分离出来统计到指定日志文件中,在使用日志追踪功能之前,必须将 primary log level设置为debug,然后可以开始指定日志追踪规则。
&emps;&emps;日志追踪的原理是给 emqx 安装一个新的 log handler,并设置 handler 的过滤条件。在 日志级别和 log handlers 小节,我们讨论过 log handler 的细节。示例如下:

#开启ClientID日志追踪,将所有ClientID为 'my_client' 的日志都输出到log/my_client.log:
$ emqx_ctl log primary-level debug
debug
$ emqx_ctl trace start client my_client log/my_client.log
trace clientid my_client successfully
#开启Topic日志追踪,将主题能匹配到 't/#' 的消息发布日志输出到 log/topic_t.log:
$ emqx_ctl log primary-level debug
debug
$ emqx_ctl trace start topic 't/#' log/topic_t.log
trace topic t/# successfully
#查询已经开启的日志追踪:
$ emqx_ctl trace list

回到目录    回到末尾

六、更多

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐