zoukankan      html  css  js  c++  java
  • 【转载】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!---------------------------------------------------------------------------------------------------
  • 相关阅读:
    suse12安装详解
    Centos7上部署openstack mitaka配置详解(将疑难点都进行划分)
    菜鸟帮你跳过openstack配置过程中的坑[文末新添加福利]
    openstack中dashboard页面RuntimeError: Unable to create a new session key. It is likely that the cache is unavailable.
    Multiple network matches found for name 'selfservice', use an ID to be more specific.报错
    查看 SELinux状态及关闭SELinux
    SELinux深入理解
    IP地址、子网掩码、网络号、主机号、网络地址、主机地址
    Oracle job procedure 存储过程定时任务
    POI文件导出至EXCEL,并弹出下载框
  • 原文地址:https://www.cnblogs.com/ww-xiaowei/p/14648645.html
Copyright © 2011-2022 走看看