前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >liteflow学习四之资源配置文件解析

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

作者头像
路行的亚洲
发布2023-10-20 14:10:21
3340
发布2023-10-20 14:10:21
举报
文章被收录于专栏:后端技术学习后端技术学习

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/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后端技术学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、liteflow解析资源文件
  • 二、三种解析方式
  • 三、解析相关配置存储文件的插件
  • 四、解析存储配置文件之外
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档