EMQ 问答社区

MySQL通过规则引擎的持久化问题

问题描述

表结构:

SQL输入:

SELECT payload,clientid FROM "must/#"

响应SQL:

insert into sensor (cid,sensor_date) 
values (${clientid},${payload})

插入后的数据如下:
image
怎么只保存msg:后的数据?

环境信息

  • EMQ X 版本:较新的企业版EMQX,使用时间不到一个月
  • 操作系统及版本:centos7
  • 其他

你的 Payload 内容是什么可以发一下吗

public static void test() throws MqttException {
    MqttClient client = MqttClientUtil.getMqttClient("test1", "test1", "123".toCharArray());
    Random random = new Random();
    int i = random.nextInt(100);
    Integer integer = i;
    String string = "msg:"+integer.toString();
    byte[] bytes = string.getBytes();
    client.publish("must/test1",bytes,2,false);
}

测试的数据通过这个java程序发出
websocket订阅后收到的数据是这样的

我直接使用企业版的mysql插件可以获取数据以BLOB形式存储
所以感觉发出的数据大概没啥问题


但BLOB不是很会用

可以查看这里面的函数:

SELECT
  replace(payload.x, 'msg:', '') as c,
  int(c) as c
FROM
 "#"

payload: {"x": "msg:10"}
result: {
  "c": 10
}

我的规则匹配是这样的

SELECT
  int(replace(payload.msg, 'msg:', '')) as a
FROM "must/#"

测试结果是

{
  "a": 1
}

可是规则却一直不命中

主题设置为 “#” 也同样没用命中