EMQ 问答社区

开源版本4.29,配置完规则以及资源后,调用web_hook 访问TDengine API接口出现400现象

问题描述

基于 EMQ X + TDengine 进行数据存储时,调用web_hook方式,
规则SQL里配了:SELECT payload FROM "sensor/data"
响应动作配了:
1、payload_tmpl:

INSERT INTO test.sensor_data VALUES( now, '${payload.client_id}', ${payload.speed}, ${payload.curtime} );

2.失败时动作:

payload_tmpl: INSERT INTO test.sensor_data VALUES( now, 'testError', 50, 253542 );

资源详情:{username}:{password} 经过 Base64 编码,原始是 root:taosdata
url: http://120.76.131.231:6041/rest/sql POST 方式
headers: Authorization Basic cm9vdDp0YW9zZGF0YQ==

规则运行后都会选中,但都是执行动作2(失败动作),往TDengine库表里插入写死的数据。动作1一直没有执行,查了emqx.log日志,一直提示:

2021-04-02 09:09:45.205 [warning] <<"client101">>@121.39.60.8:9087 [WebHook Action] HTTP request failed with status code: 400

把动作2,改成 payload_tmpl: INSERT INTO test.sensor_data VALUES( now, '${payload.client_id}', 50, 253542 ); , 写到TDengie数据库里字段值都是 undefined ,没取到数据。

在用规则里的SQL测试,payload 填入:

{"client_id":30,speed":20,"curtime":1596157444170}

输出:

{
  "payload": "{\"client_id\":30,speed\":20,\"curtime\":1596157444170}"
}

抓包发现,EMQX 往 TDengine 发送请求时,payload 都是空值。

插件emqx_web_hook 也开启了,以上找不到问题所在,请各位帮忙指点下,谢谢。

环境信息

  • EMQ X 版本:4.29
  • 操作系统及版本:EMQX 是windows server2012 R2,TDengine 部署在RedHat上
  • 其他

相关截图




执行失败后payload的内容你试试【debug】看下输出?

建议添加一个 Inspect(debug) 动作,看下执行日志。