thingsboard的规则引擎。项目启动怎么加载的?数据过来了,怎么运行的?相关代码入口分别在哪里?

  • 作者: 凯哥Java(公众号:凯哥Java)
  • thingsboard
  • 时间:2023-08-16 16:30
  • 6505人已阅读
简介 ThingsBoard的规则引擎是通过一个独立的进程运行的,并且与主服务器相分离。在项目启动过程中,规则引擎会自动加载并开始运行。数据进入到规则引擎的处理流程如下:数据接入:数据通过消息代理或其他数据接入端点进入ThingsBoard。数据解析:数据经过解析模块的处理,以便将其转换为规则引擎能够理解的格式。规则链匹配:解析后的数据将被传递给规则链进行匹配,规则链是按优先级排序的规则的集合。规则评估

🔔🔔好消息!好消息!🔔🔔

 如果您需要注册ChatGPT,想要升级ChatGPT4。凯哥可以代注册ChatGPT账号代升级ChatGPT4

有需要的朋友👉:微信号 kaigejava2022

ThingsBoard的规则引擎是通过一个独立的进程运行的,并且与主服务器相分离。在项目启动过程中,规则引擎会自动加载并开始运行。

数据进入到规则引擎的处理流程如下:

  1. 数据接入:数据通过消息代理或其他数据接入端点进入ThingsBoard。

  2. 数据解析:数据经过解析模块的处理,以便将其转换为规则引擎能够理解的格式。

  3. 规则链匹配:解析后的数据将被传递给规则链进行匹配,规则链是按优先级排序的规则的集合。

  4. 规则评估与执行:匹配到的规则将被评估,并相应地执行规则的操作或触发事件。规则可以执行各种操作,如发送消息、保存数据、触发报警等。

  5. 结果输出:规则引擎将处理结果返回给主服务器,并相应地执行操作或触发事件。

这个整个过程是由规则引擎的核心组件和其他相关模块共同协作完成的。规则引擎的配置和管理可以通过ThingsBoard的管理界面进行设置和监控。

以下是ThingsBoard规则引擎的五个步骤以及相关代码入口的示例:

1.数据接入:数据接入的代码入口通常是在消息代理(如MQTT代理)的回调函数中。在这个函数中,你可以获取到接收到的消息内容,并将其传递给规则引擎进行处理。

// 示例:在消息代理的回调函数中将消息传递给规则引擎处理
public void onMessageReceived(Message message) {
    // 解析接收到的消息内容
    String payload = message.getPayload();
    
    // 将消息传递给规则引擎
    RuleEngine.getInstance().onMessageReceived(payload);
}

2.数据解析:数据解析通常是在规则引擎的核心组件中进行的。在这个组件中,你可以编写代码将接收到的数据进行解析,并转换为规则引擎能够理解的格式。

// 示例:数据解析逻辑
public void parseData(String data) {
    // 解析数据,并将其转换为规则引擎能够理解的格式
    Data parsedData = parseData(data);
    
    // 将解析后的数据传递给规则链进行匹配
    RuleChainMatcher.getInstance().match(parsedData);
}

3.规则链匹配:规则链匹配通常是在规则链管理器中进行的。规则链管理器负责维护规则链的列表并按优先级排序。

// 示例:规则链匹配逻辑
public void match(Data data) {
    // 按照规则优先级排序规则链列表
    List<RuleChain> sortedChains = sortRuleChains(ruleChains);
    
    // 逐个规则链进行匹配
    for (RuleChain chain : sortedChains) {
        if (chain.matches(data)) {
            // 如果匹配到规则链,则进行规则评估与执行
            evaluateAndExecuteRules(chain.getRules(), data);
        }
    }
}


4.规则评估与执行:规则评估与执行通常是在规则链中的规则中进行的。在规则中,你可以编写代码来评估条件,执行操作或触发事件。

// 示例:规则评估与执行逻辑
public void evaluateAndExecuteRules(List<Rule> rules, Data data) {
    // 逐个规则进行评估与执行
    for (Rule rule : rules) {
        if (rule.evaluate(data)) {
            // 如果规则条件满足,则执行规则操作或触发事件
            rule.execute(data);
        }
    }
}

5.结果输出:规则引擎的结果输出通常是将结果返回给主服务器,在主服务器中你可以根据返回的结果执行相应的操作或触发事件。

// 示例:规则引擎结果输出逻辑
public void onRuleResultReceived(RuleResult result) {
    // 处理规则引擎的结果输出
    if (result.isSuccess()) {
        // 执行操作或触发事件
        performAction(result.getAction());
    }
}

请注意,以上示例代码仅用于说明相关步骤的代码入口,实际的实现可能会根据你的项目需求和选择的编程语言略有不同。


TopTop