liteflow学习四之资源配置文件解析

2023-10-20 14:10:21 浏览数 (1)

liteflow的方便在于其可以适配多种配置文件,依然可以轻松的解析。可以看到作者提供了json解析、xml解析、yml解析。那么我们来看看这三种解析的方式是如何实现的。

一、liteflow解析资源文件

可以看到在执行处理的过程中,会执行初始化动作,这个初始化动作,在实现初始化bean的时候就会执行。除此之外调用执行处理方法的时候,依然会执行判断是否执行一次。

代码语言:javascript复制
for (String path : sourceRulePathList) {
    // 查找对应的解析器
    parser = FlowParserProvider.lookup(path);
    parserNameSet.add(parser.getClass().getName());
    // 替换掉前缀标识(如:xml:/json:),保留剩下的完整地址
    path = ReUtil.replaceAll(path, PREFIX_FORMAT_CONFIG_REGEX, "");
    rulePathList.add(path);

    // 支持多类型的配置文件,分别解析
    if (BooleanUtil.isTrue(liteflowConfig.isSupportMultipleType())) {
        // 解析文件
        parser.parseMain(ListUtil.toList(path));
    }
  }
}

可以看到这里判断了一个配置信息,是否支持多种类型,如果支持,则进行解析操作。也即解析的工作主要靠parser.parseMain(ListUtil.toList(path))这个方法路由实现。可以看到它又可以分为:

代码语言:javascript复制
JsonFlowELParser
ClassXmlFlowELParser
ClassYmlFlowELParser

除此之外还有三个带Local为前缀的,以上面的类似。

二、三种解析方式

这里以json格式为例进行说明。

JsonFlowELParser可以看到主要解析两个信息:node和chain的信息,并进行build构建。也即

parseNodeJson =>LiteFlowNodeBuilder创建node

代码语言:javascript复制
    LiteFlowNodeBuilder.createNode()
            .setId(id)
            .setName(name)
            .setClazz(clazz)
            .setType(nodeTypeEnum)
            .setScript(script)
            .setFile(file)
            .setLanguage(language)
            .build();

parseChainJson=>FlowBus.addChain(chainName) 构建chain =>从而进一步构建parseOneChain => LiteFlowChainELBuilder创建el表达式

代码语言:javascript复制
public static void parseOneChainEl(JsonNode chainNode) {
        // 构建chainBuilder
        String chainId = Optional.ofNullable(chainNode.get(ID)).orElse(chainNode.get(NAME)).textValue();
        String el = chainNode.get(VALUE).textValue();
        LiteFlowChainELBuilder.createChain()
                .setChainId(chainId)
                .setEL(el)
                .build();
    }

完成解析工作。前面我们知道这个设置el其实做了很多工作,方便后续的chain获取,依据后续的nodeComponent操作。

可以看到这三个解析器中,parseOneChain这个动作其实是一样的。只是前面的两步有一些不一样。不管是解析xml还是解析yml,两者最终的构建都是殊途同归,进行节点构建LiteFlowNodeBuilder创建node。然后parseOneChain => LiteFlowChainELBuilder创建el表达式。

三、解析相关配置存储文件的插件

以此同时,可以看到后续的版本增加了很多存储配置文件的插件。也即liteflow-rule-plugin这个模块。那这个模块究竟是做什么的呢?从模块中,我们可以看到存储规则的如下方式有:

代码语言:javascript复制
apollo   对应解析的文件类ApolloXmlELParser
etcd     对应的解析文件类 EtcdXmlELParser
nacos    对应的解析文件类 NacosXmlELParser
redis    对应的解析文件类 RedisXmlELParser
sql      对应的解析文件类 SQLXmlELParser
zk       对应的解析文件类ZkXmlELParser

有了上面的解析类,可以解析我们想要的解析文件。其最终还是解析node和chain。从而实现对相关配置方便管理和读取。从而进行后续业务逻辑编排操作。

四、解析存储配置文件之外

除此之外,liteflow还提供了非常人性化的热部署功能。热部署的功能借助脚本组件来实现。脚本组件的方便在于其能够实现热部署刷新功能。这个方便上线的方便灵活修改配置信息。这个功能在liteflow-script-plugin模块中,通过引入相关依赖,可以实现在生产上热部署的实现业务逻辑编排功能的正常执行。

参考:https://gitee.com/dromara/liteFlow https://liteflow.cc/

0 人点赞