• 【转载】easy-flows流程编排介绍


    来源:https://blog.csdn.net/Dream_Weave/article/details/106711169

    https://gitee.com/xiaoka2017/easy-flow

    Java的工作流引擎, 它提供简单的api和构建块,以方便创建和运行可以组合工作流。

    简单流程中的工作单元由 Work 接口表示。 工作流由 WorkFlow 接口表示。 轻松流提供 WorkFlow 接口的4实现:

    这些是你需要知道的唯一基本流,以便开始创建简单流程的工作流。 你不需要学习复杂的符号或者概念,只是一些简单易于思考的自然 api。

    它是如何工作的?

    首先,让我们写一些Work:

    class PrintMessageWork implements Work {
    
        private String message;
    
        public PrintMessageWork(String message) {
            this.message = message;
        }
    
        public String getName() {
            return "print message work";
        }
    
        public WorkReport call(WorkContext workContext) {
            System.out.println(message);
            return new DefaultWorkReport(WorkStatus.COMPLETED, workContext);
        }
    }

    这里工作单元将给定消息打印到标准输出。 现在假设我们想创建以下工作流:

    • 打印"foo"三次
    • 然后并行打印"hello""world"
    • 如果"hello""world"都已经成功打印到控制台,则打印"ok",否则打印"nok"

    这里工作流可以如下所示:

    • flow1 是 work1的 RepeatFlow,它打印"foo"三次
    • flow2 是 work2 和 work3 ParallelFlow,它并行地打印"hello""world"
    • flow3 是一个 ConditionalFlow,它先执行 flow2 ( 工作流也是工作),如果 flow2 完成,则执行 work4,否则将分别打印“ok”“nok”
    • flow4 是一个 SequentialFlow 它执行 flow1,然后按顺序执行 flow3

    通过轻松流,可以使用以下代码段实现这里工作流:

    PrintMessageWork work1 = new PrintMessageWork("foo");
    PrintMessageWork work2 = new PrintMessageWork("hello");
    PrintMessageWork work3 = new PrintMessageWork("world");
    PrintMessageWork work4 = new PrintMessageWork("ok");
    PrintMessageWork work5 = new PrintMessageWork("nok");
    
    ExecutorService executorService = Executors.newFixedThreadPool(2);
    WorkFlow workflow = aNewSequentialFlow() // flow 4
            .execute(aNewRepeatFlow() // flow 1
                        .named("print foo 3 times")
                        .repeat(work1)
                        .times(3)
                        .build())
            .then(aNewConditionalFlow() // flow 3
                    .execute(aNewParallelFlow(executorService) // flow 2
                                .named("print 'hello' and 'world' in parallel")
                                .execute(work2, work3)
                                .build())
                    .when(WorkReportPredicate.COMPLETED)
                    .then(work4)
                    .otherwise(work5)
                    .build())
            .build();
    
    WorkFlowEngine workFlowEngine = aNewWorkFlowEngine().build();
    WorkContext workContext = new WorkContext();
    WorkReport workReport = workFlowEngine.run(workflow, workContext);
    executorService.shutdown();

    这不是一个非常有用的工作流程,但是只是为了给你一个简单的流程编写工作流。 你可以在中找到关于所有这一切的更多细节。

    -----------------------------------------Have a good day!---------------------------------------------------------------------------------------------------
  • 相关阅读:
    通用Struts2 配置文件Filterwebxml
    spring+hibernate+struts2应用mysql数据库乱码问题
    区域医疗卫生平台建设(五) HL7 RIM
    在昆山的日子终于要结束了
    医疗基本知识之医嘱篇(三)医嘱中药物、药品、处方的处理
    区域卫生信息平台建设(一)政策
    区域卫生信息平台建设(四)概念模型与逻辑模型
    区域卫生信息平台建设(二)基本功能
    区域卫生信息平台建设(三)数据模型基本概念
    平板电脑选择
  • 原文地址:https://www.cnblogs.com/ww-xiaowei/p/14648645.html
Copyright © 2020-2023  润新知