Thanks to visit codestin.com
Credit goes to Github.com

Skip to content

Simple biz flow or data flow for business orchestration

Notifications You must be signed in to change notification settings

joooohnli/simple-biz-flow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

simple-biz-flow

Simple biz flow or data flow for business orchestration

Get started

find the example in samples foler.

1.difine components

Work

@Service("recall")
public class RecallWork implements Work<MyPayload, MyPayload> {
    @Override
    public MyPayload work(FlowContext context, MyPayload input, Map<String, String> properties) {
        MyFlowContext myFlowContext = (MyFlowContext) context;
        User user = myFlowContext.getUser();
        MyPayload myPayload = new MyPayload();
        // ...
        return myPayload;
    }
}

Merge

@Service("myMerge")
public class MyMerge implements Merge<MyPayload,MyPayload> {
    @Override
    public MyPayload merge(FlowContext context, Map<String, MyPayload> in, Map<String, String> properties) {
        // ...
        return myPayload;
    }
}

Select

@Service("mySelect")
public class MySelect implements Select<MyPayload> {

    @Override
    public int select(FlowContext context, MyPayload input, Map<String, String> properties) {
        MyFlowContext myFlowContext = (MyFlowContext) context;
        if (myFlowContext.getStrategy() == 0) {
            return Integer.parseInt(properties.get("default"));
        }

        return 0;
    }
}

2.config flow

<flow-config>
    <flows>
        <flow id="f1">
            <nodes>
                <work-node id="w1" bean="recall"/>
                <parallel-node id="p1" timeoutMillSec="3000">
                    <flows>
                        <flow id="pf1">
                            <nodes>
                                <work-node id="w2" bean="sort1">
                                    <properties>
                                        <property key="x" value="1234"/>
                                    </properties>
                                </work-node>
                            </nodes>
                        </flow>
                        <flow id="pf2">
                            <nodes>
                                <work-node id="w3" bean="sort1">
                                    <properties>
                                        <property key="x" value="5678"/>
                                    </properties>
                                </work-node>
                                <work-node id="w4" bean="sort2"/>
                            </nodes>
                        </flow>
                    </flows>
                    <merge id="m1" bean="myMerge"/>
                </parallel-node>
                <select-node id="s1" bean="mySelect">
                    <properties>
                        <property key="default" value="1"/>
                    </properties>
                    <flows>
                        <flow id="sf1">
                            <nodes>
                                <work-node id="w5" bean="sort2"/>
                            </nodes>
                        </flow>
                        <flow id="sf2"/>
                    </flows>
                </select-node>
            </nodes>
        </flow>
    </flows>
</flow-config>

3.load flow

// load from local file
FlowManager.reloadFromFile("flow.xml", true);
// or load from xml string
FlowManager.reloadFromStr("...", true);

4.run flow

// init your business context
FlowContext flowContext = new MyFlowContext(new User().setMid(0).setLabel("super"), 0);
// start run flow f1
MyPayload execute = FlowManager.execute(flowContext, "f1");

Graph

Use GraphUtil to generate flow diagram. It's usefull when you want to demonstrate or self-check your business logic .

    GraphUtil.drawGraph(FlowManager.getFlow("flow"), "/Users/john/Downloads/flow.svg");

Like this one in samples: flow_diagram

Monitor

digest log

# format: nodeId,elapsed time(ms),Success or Failed|,,|,,
2020-03-27 17:52:58.326  INFO 47400 --- [io-20201-exec-1] com.john.bizflow.digest                  : f1,110,S|w1,0,S|p1,109,S|pf1,1,S|w2,1,S|pf2,104,S|w3,1,S|w4,103,S|s1,0,S|sf2,0,S

About

Simple biz flow or data flow for business orchestration

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages