• 低代码-业务流程引擎


    一、写在前面

    最近看到一个新闻,讲的湖南的一位卖菜阿姨火了。她的生意,比其他菜摊好得多,赚得也多得多。归根结底是她懂得抓住年轻人的痛点。这位卖菜的阿姨发现自己的孩子因为工作忙碌,经常不在家做饭,常常叫外卖。但这些外卖吃多了,其实对身体非常不好。阿姨就在自己的卖菜摊上,开了一周菜单服务。年轻人嫌麻烦,阿姨帮年轻人菜洗好、切好、搭配好,只要回去简单炒一下就可以了。而且还附送调料,傻瓜级的做饭教程。让我想到《无双》当中发哥的一句台词“任何事情,做到极致就是艺术。”这也是我一直在践行低代码的原因,把自己的专业做到极致,在这一领域里深根下去。当然我没有特意去吹捧低代码如何如何的好,但对我们技术人员来说确实可以提高效率,进而为企业去创造更大的价值。

    二、业务流程引擎方案

    在之前的文章里陆续介绍了关于规则引擎解决促销类问题、数据权限等问题,但你会发现其实这些仅仅只是冰山一角,即使是对于一个简单的业务场景都不能实现,因为再简单的业务其实都是有一个流程的概念,如何抽象这些流程,变成通用的框架、中间件等才是我们需要不断去思考的问题。优秀的思想总是来源于经验的累积,知识的积淀,加上不断的思考,我们身处在这个伟大的时代,总是可以借鉴一些前人总结的宝贵经验来提升我们自己的认知。在项目当中主要是用了spring batch 框架来处理定时任务的业务流,刚开始在用的时候也很方便,舒服,但随着业务的发展,想要新加一个类似的流程,都需要通过编码来实现,很多工作都是重复的,实在受不了这样的方式,效率太低下,经过近半个月的调研,思考,最后终于完成了相对比较满意的流程方案,今天主要跟大家分享下思路。

    如果你对spring batch 还不甚了解的话,可以先网上找些资料熟悉下,接下来讲的一些名词概念需要你对它有一定的基础。首先来看张架构图:

    file

    对我们来说最重要的就是Step,它又细分为tasklet和chunk,这也是我们目前使用最多的两种方式,我也参考batch的思想,在我的设计方案里,流程的每个节点Node为一个Step,根据Node类型动态生成tasklet和chunk,然后在每一个tasklet/chunk里又有我自己定义的step概念,每一个step执行一个动作,如取数、更新、过滤、ftp推送等等,这样其实通过spring batch 框架已经把我们的业务流程串联起来了。以上也是我们基于batch 自研的业务流程引擎的核心内容。

    三、业务流程引擎实践

    有了上面初步的思想,接下来就是落地实践的过程了,此部分主要分享下在落地过程中遇到的一些问题。首先是job如何动态配置,这个问题处理相对有点难度,一开始想看下网上是否有人想过类似的实现,就去搜索了下,还真有人提过相似的问题,但没有解决方案,基本没人回复。接下来就只能靠自己来想了,对我而言,我只需要解决怎么样才能够动态的添加Step即可,因为我的每一个节点是配置出来的,在上一部分我们知道,节点Node就是一个 batch 的Step,只能在job配置的时候,动态的获取配置的节点,然后动态加载Step:

    file

    file

    最后

    jobBuilder.build()
    返回创建的job。

    以上算是解决了动态载入job的解决方案。接下来却遇到了更麻烦的问题,在我的方案中,在job启动的时候可以关联多个流程的,需要把多个job注入到容器中,直接上代码:

    file

    在for 循环中,把返回的job实例先缓存起来,当容器启动成功后,再注册到容器中:

    file

    到目前为止,已经支持动态载入job,且多个job注册。细心的朋友应该可能发现了问题,我们的流程都是动态配置的,当系统正常运行后,新配置的流程如何加载进来,并运行呢?这个问题的求解也容易,有了上面一个问题的经验,我们是动态注入bean到容器中的,那此时我们只需要动态的刷新的bean就好了。这个问题留给你们啦,有兴趣的自行尝试下。

    四、总结

    以上其实只是好玩的一小部分,当然也会遇到好多的问题,但想法总比问题多,低代码的实践过程中更有许多有趣好玩的编程思想在尝试,更重要的是整个团队都在成长。

    file

    欢迎关注file

  • 相关阅读:
    设计模式笔记
    前端项目练习(练习-003-webpack-01)
    《儿童教育心理学》读书笔记
    面向无线传感器网络WSN的增强型MODLEACH设计与仿真(Matlab代码实现)
    精致耐听的真无线耳机,音质不错续航持久,英雄E1上手
    [扩展欧几里得]Draw a triangle 2022年桂林站E
    POST注入 | 盲注 | 宽字节注入
    嵌入式中间件_4.嵌入式中间件的主要功能及典型产品
    GIT学习P1:操作分支
    Anaconda + VS Code 的安装与使用
  • 原文地址:https://www.cnblogs.com/yilimaizi/p/16156320.html