保存数据到 SQLServer

搭建 SQLServer 数据库,并设置用户名密码为 sa/mqtt_public,以 MacOS X 为例:

  1. docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=mqtt_public' -p 1433:1433 -d mcr.microsoft.com/mssql/server:2017-latest

进入SQLServer容器, 初始化 SQLServer 表:

设置 sa 密码

  1. $ /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P mqtt_public -d master

创建 “mqtt” 数据库:

  1. CREATE DATABASE mqtt;
  2. go;

创建 t_mqtt_msg 表:

  1. USE mqtt;
  2. go;
  3. CREATE TABLE t_mqtt_msg (id int PRIMARY KEY IDENTITY(1000000001,1) NOT NULL,
  4. msgid VARCHAR(64) NULL,
  5. topic VARCHAR(100) NULL,
  6. qos tinyint NOT NULL DEFAULT 0,
  7. payload NVARCHAR(100) NULL,
  8. arrived DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP);
  9. go;

Mac上配置 odbc 驱动:

  1. $ brew install unixodbc freetds
  2. $ vim /usr/local/etc/odbcinst.ini
  3. [ms-sql]
  4. Description = ODBC for FreeTDS
  5. Driver = /usr/local/lib/libtdsodbc.so
  6. Setup = /usr/local/lib/libtdsodbc.so
  7. FileUsage = 1

Centos上配置 odbc 驱动:

  1. $ yum install unixODBC unixODBC-devel freetds freetds-devel perl-DBD-ODBC perl-local-lib
  2. $ vim /etc/odbcinst.ini
  3. # 加入以下内容
  4. [ms-sql]
  5. Description = ODBC for FreeTDS
  6. Driver = /usr/lib64/libtdsodbc.so
  7. Setup = /usr/lib64/libtdsS.so.2
  8. Driver64 = /usr/lib64/libtdsodbc.so
  9. Setup64 = /usr/lib64/libtdsS.so.2
  10. FileUsage = 1

Ubuntu上配置 odbc 驱动(以 Ubuntu20.04 为例,其他版本请参考 odbc 官方文档):

  1. $ apt-get install unixodbc unixodbc-dev tdsodbc freetds-bin freetds-common freetds-dev libdbd-odbc-perl liblocal-lib-perl
  2. $ vim /etc/odbcinst.ini
  3. # 加入以下内容
  4. [ms-sql]
  5. Description = ODBC for FreeTDS
  6. Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
  7. Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
  8. FileUsage = 1

创建规则:

打开 EMQX Dashboard保存数据到 SQLServer - 图1 (opens new window),选择左侧的 “规则” 选项卡。

填写规则 SQL:

  1. SELECT * FROM "t/#"

image

关联动作:

在 “响应动作” 界面选择 “添加”,然后在 “动作” 下拉框里选择 “保存数据到 SQLServer”。

image

填写动作参数:

“保存数据到 SQLServer” 动作需要两个参数: 4 2). SQL 模板。这个例子里我们向 SQLServer 插入一条数据,SQL ​ 模板为:

  1. insert into t_mqtt_msg(msgid, topic, qos, payload) values ('${id}', '${topic}', ${qos}, '${payload}')

image

1). 关联资源的 ID。现在资源下拉框为空,可以点击右上角的 “新建资源” 来创建一个 SQLServer 资源:

填写资源配置: 数据库名填写 “mqtt”,用户名填写 “sa”,密码填写 “mqtt_public”

image

点击 “新建” 按钮。

返回响应动作界面,点击 “确认”。

image

返回规则创建界面,点击 “创建”。

image

规则已经创建完成,现在发一条数据:

  1. Topic: "t/a"
  2. QoS: 1
  3. Payload: "hello"

在规则列表里,点击 “查看” 按钮或规则 ID 连接,可以预览刚才创建的规则:

可以看到规则已经成功执行,统计指标已经增加。

image

然后检查 SQLServer 表,新的 record 是否添加成功:

image