Skip to content

配置文件

本节将介绍如何通过 nanomq.conf 配置文件来配置规则引擎。

规则引擎配置

默认情况规则引擎功能是关闭的,如需要启用,请开启 -DENABLE_RULE_ENGINE=ON 选项进行编译。规则引擎开启后,默认支持 repub 功能。

转发规则

用户可通过转发规则实现 MQTT 消息的转发,具体的配置项如下表所列:

参数名数据类型参数说明
rules.repub.rules[0].addressString规则引擎重新发布地址 (mqtt-tcp://host:port)
rules.repub.rules[0].topicString规则引擎重新发布主题
rules.repub.rules[0].usernameString规则引擎重新发布用户名
rules.repub.rules[0].passwordString规则引擎重新发布密码
rules.repub.rules[0].proto_verInteger规则引擎重新发布协议版本,默认是 4
rules.repub.rules[0].clientidString规则引擎重新发布客户端标识符
rules.repub.rules[0].keepaliveDuration规则引擎重新发布保活时间,默认值是 60
rules.repub.rules[0].clean_startBoolean规则引擎重新发布 clean_start 标志,默认是 True
rules.repub.rules[0].sqlString规则引擎 SQL 语句

创建规则

假设我们希望配置一条 repub 规则,根据规则,当收到从主题 abc 发来的消息时,NanoMQ 会将 topicpayload 打包成 JSON 并转发到 topic/repub1

测试规则

在第一个窗口启动 nanomq

sh
$ nanomq start

在第二个窗口启动 nanomq_cli,订阅指定服务器地址下的 topic/repub1 主题:

sh
$ nanomq_cli sub -t topic/repub1
connect_cb: mqtt-tcp://127.0.0.1:1883 connect result: 0 
topic/repub1: {"topic":"abc","payload":"aaa"}

在第三个窗口启动一个新的 nanomq_cli,发布消息 aaa 到主题 abc

sh
$ nanomq_cli pub -t abc -m aaa

可以看到第二个窗口收到来自主题 topic/repub1 的消息。

SQLite 规则

如需启用 SQLite,请开启 -DNNG_ENABLE_SQLITE=ON 选项进行编译

参数名数据类型参数说明
rules.sqlite.pathString规则引擎 SQLite3 数据库路径, 默认是 /tmp/rules_engine.db
rules.sqlite.rules[0].tableString规则引擎 SQLite3 数据库表名
rules.sqlite.rules[0].sqlString规则引擎 SQL 语句

创建规则

假设我们希望配置一条 sqlite 规则,根据规则,当收到从主题 abc 发来的消息时,触发 NanoMQ 的规则引擎存储,并将 topicpayload 两个字段的内容存储到 database 文件的表 broker 中。

测试规则

在第一个窗口启动 nanomq

sh
$ nanomq start

在第二个窗口启动 nanomq_cli,发布消息 aaa 到主题 abc:

sh
$ nanomq_cli pub -t abc -m aaa

在第二个窗口查看 SQLite 保存的消息。

sh
$ sqlite3 /tmp/sqlite_rule.db
SQLite version 3.11.0 2016-02-15 17:29:24
Enter ".help" for usage hints.
sqlite> .header on
sqlite> .table
broker
sqlite> select * from broker;
RowId|Topic|Payload
1|abc|aaa

📢注意:使用 sqlite3 命令前确保已安装,如未安装可通过以下命令安装:

sh
apt update
apt install sqlite3

MySQL 规则配置

前置准备

如需启用 MySQL,请先安装依赖:

  • ubuntu
    shell
    apt-get install pkg-config
    apt install libmysqlclient-dev
  • macOS
    shell
    brew install pkg-config
    brew install mysql

配置项

开启 -DENABLE_MYSQL=ON 选项进行编译,具体操作,见通过源代码编译安装 NanoMQ。相关配置项如下表所列:

参数名数据类型参数说明
rules.mysql.name.conn.tableString规则引擎 mysql 数据库表名字
rules.mysql.name.conn.hostString规则引擎 mysql 数据库主机名
rules.mysql.name.conn.usernameString规则引擎 mysql 数据库用户
rules.mysql.name.conn.passwordString规则引擎 mysql 数据库密
rules.mysql.name.rules[0].tableString规则引擎 mysql 数据库名字, 默认是 mysql_rules_db
rules.mysql.name.rules[0].sqlString规则引擎 sql 语句

创建规则

我们希望创建如下规则,当收到来自主题 abc 的消息,会触发 NanoMQ 的规则引擎存储,并将 field 的所有字段的内容存到 database 指定的表 broker1 内。

测试规则

在第一个窗口启动 nanomq:

sh
$ nanomq start

在第二个窗口启动 nanomq_cli,发布消息 aaa 到主题 abc:

sh
$ nanomq_cli pub -t abc -m aaa

在第二个窗口查看 MySQL 保存的消息。

sh
$ mysql -u username -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 5.7.33-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use db_name
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from broker1;
+-----+------+------+-------+-----------------+----------+----------+------------+-----------------+
| idx | Qos  | Id   | Topic | Clientid        | Username | Password | Timestamp  | Payload         |
+-----+------+------+-------+-----------------+----------+----------+------------+-----------------+
|   1 |    0 |    0 | abc   | nanomq-fcfd2f11 | (null)   | (null)   | 1688437187 | aaaaaaaaaaaaaaa |
+-----+------+------+-------+-----------------+----------+----------+------------+-----------------+
1 row in set (0.00 sec)

📢注意:确保 conn 配置项中各个参数是有效的,其中 database 需要提前创建。