Trending REST-based microservice architecture does not provide standardized solutions for composing services into reliable business processes.
nFlow fills this gap by providing a framework for implementing workflows based on ideas like idempotent retry and finite state machine.
You can cherry-pick the modules that are relevant for your use case.
The minimum pre-requirements for embedding nFlow engine to your application are Spring Framework core and a relational database (PostgreSQL, MySQL, Oracle, H2).
Order management workflows for a big media company are managed by nFlow. For example, the order delivery workflow contains 10+ integrations that are modeled as workflow states. Workflow execution can be monitored through nFlow Explorer and each state is automatically retried until the desired outcome is reached.
Each new customer feedback starts a workflow that orchestrates machine learning-based feedback analysis, notification sending and other preprocessing tasks. New customer feedback can submitted regardless of the status of the backend systems.
The following fully working example illustrates how a workflow is defined. The definition contains both the workflow structure and the workflow implementation. nFlow Explorer uses the structure for visualizing the workflow. nFlow engine uses the implementation for executing workflow instances.
public class DemoWorkflow extends WorkflowDefinition { private static final State BEGIN = new State("begin", WorkflowStateType.start); private static final State PROCESS = new State("process"); private static final State DONE = new State("done", WorkflowStateType.end); private static final State ERROR = new State("error", WorkflowStateType.manual); public DemoWorkflow() { super("demo", BEGIN, ERROR); permit(BEGIN, PROCESS); permit(PROCESS, DONE); } public NextAction begin(StateExecution execution) { return moveToState(PROCESS, "To process state"); } public NextAction process(StateExecution execution) { return stopInState(DONE, "To done state"); } }
Post a question to Google groups
Submit an issue to Github
For commercial support, contact Nitor sales