当前位置: 首页 > 工具软件 > xBlog > 使用案例 >

emqx通过http API创建规则

印嘉泽
2023-12-01

emqx通过http API创建规则


如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033

环境: emqx: v4.3.8

相关阅读:
emq获取所有发布内容

emqx HTTP API基础

HTTP API

EMQ X 提供了 HTTP API 以实现与外部系统的集成,例如查询客户端信息、发布消息和创建规则等。

EMQ X 的 HTTP API 服务默认监听 8081 端口,可通过 etc/plugins/emqx_management.conf 配置文件修改监听端口,或启用 HTTPS 监听。EMQ X 4.0.0以后的所有 API 调用均以 api/v4 开头。

接口安全

EMQ X 的 HTTP API 使用Basic 认证方式,idpassword 须分别填写 AppID 和 AppSecret。 默认的 AppID 和 AppSecret 是:admin/public。你可以在 Dashboard 的左侧菜单栏里,选择 “管理” -> “应用” 来修改和添加 AppID/AppSecret。

响应码

HTTP 状态码 (status codes)

EMQ X 接口在调用成功时总是返回 200 OK,响应内容则以 JSON 格式返回。

可能的状态码如下:

Status CodeDescription
200成功,返回的 JSON 数据将提供更多信息
400客户端请求无效,例如请求体或参数错误
401客户端未通过服务端认证,使用无效的身份验证凭据可能会发生
404找不到请求的路径或者请求的对象不存在
500服务端处理请求时发生内部错误

返回码 (result codes)

EMQ X 接口的响应消息体为 JSON 格式,其中总是包含返回码 code

可能的返回码如下:

Return CodeDescription
0成功
101RPC 错误
102未知错误
103用户名或密码错误
104空用户名或密码
105用户不存在
106管理员账户不可删除
107关键请求参数缺失
108请求参数错误
109请求参数不是合法 JSON 格式
110插件已开启
111插件已关闭
112客户端不在线
113用户已存在
114旧密码错误
115不合法的主题

获取Broker基本信息

GET /api/v4/brokers/{node}

返回集群下所有节点的基本信息。

Path Parameters:

NameTypeRequiredDescription
nodeStringFalse节点名字,如 "emqx@127.0.0.1。 不指定时返回所有节点的信息

代码

const request = require('request');

const authStr = "admin:public";

let options = {
  'method': 'GET',
  'url': 'http://localhost:8081/api/v4/brokers/',
  'headers': {
    'Authorization': 'Basic ' + Buffer.from(authStr, 'ascii').toString('base64')
  }
};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

返回

{
    "data": [
        {
            "version": "4.3.8",
            "uptime": "19 hours, 34 minutes, 51 seconds",
            "sysdescr": "EMQ X",
            "otp_release": "23.0/11.0",
            "node_status": "Running",
            "node": "emqx@127.0.0.1",
            "datetime": "2021-10-19 10:29:03"
        }
    ],
    "code": 0
}

设置规则引擎

POST /api/v4/rules

创建规则,返回规则 ID。

Parameters (json):

NameTypeRequiredDescription
rawsqlStringTrue规则的 SQL 语句
actionsArrayTrue动作列表
- actions[0].nameStringTrue动作名称
- actions[0].paramsObjectTrue动作参数。参数以 key-value 形式表示。 详情可参看添加规则的示例
descriptionStringFalse可选,规则描述

代码

const request = require('request');

const authStr = "admin:public";

let options = {
    'method': 'POST',
    'url': 'http://localhost:8081/api/v4/rules/',
    'headers': {
        'Authorization': 'Basic ' + Buffer.from(authStr, 'ascii').toString('base64'),
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({
        "rawsql": "SELECT * FROM \"#\"",
        "actions": [{
            "params": {
                "target_topic": "abc",
                "target_qos": 0,
                "payload_tmpl": "event: ${event}\ntopic: ${topic}\npayload: ${payload}"
            },
            "name": "republish"
        }],
        "description": "all publish message"
    })

};
request(options, function (error, response) {
    if (error) throw new Error(error);
    console.log(response.body);
});

获取规则引擎信息

GET /api/v4/rules/{rule_id}

获取某个规则的详情,包括规则的 SQL、Topics 列表、动作列表等。还会返回当前规则和动作的统计指标的值。

Path Parameters:

NameTypeRequiredDescription
rule_idStringFalse可选,Rule ID。如不指定 rule_id 则 以数组形式返回所有已创建的规则

代码

const request = require('request');

const authStr = "admin:public";

let options = {
  'method': 'GET',
  'url': 'http://localhost:8081/api/v4/rules/',
  'headers': {
    'Authorization': 'Basic ' + Buffer.from(authStr, 'ascii').toString('base64')
  }
};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

License

License under CC BY-NC-ND 4.0: 署名-非商业使用-禁止演绎


Reference:

  1. https://docs.emqx.cn/enterprise/v4.3/advanced/http-api.html
 类似资料: