Workflow -Kern ist ein leichtes Gewichtsbettabdierbares Workflow Engine -Targeting .NET -Standard. Denken Sie an: Langzeitprozesse mit mehreren Aufgaben, die den Status verfolgen müssen. Es unterstützt steckbare Persistenz- und Parallelitätsanbieter, um Multi-Knoten-Cluster zu ermöglichen.
Director ist ein eigenständiger Workflow-Server im Gegensatz zu einer Bibliothek, die den Workflow-Kern intern verwendet. Es enthält eine API, mit der Sie Workflow -Definitionen speichern, ausgeführte Workflows verfolgen, Ereignisse verwalten und benutzerdefinierte Schritte und Skripte für die Verwendung in Ihren Workflows definieren können.
https://github.com/danielgerlag/conductor
Siehe Tutorial hier.
Definieren Sie Ihre Workflows mit der fließenden API.
public class MyWorkflow : IWorkflow
{
public void Build ( IWorkflowBuilder < MyData > builder )
{
builder
. StartWith < Task1 > ( )
. Then < Task2 > ( )
. Then < Task3 > ( ) ;
}
} Definieren Sie Ihre Workflows in JSON oder YAML, um Workflowcore.dsl zu installieren
{
"Id" : " HelloWorld " ,
"Version" : 1 ,
"Steps" : [
{
"Id" : " Hello " ,
"StepType" : " MyApp.HelloWorld, MyApp " ,
"NextStepId" : " Bye "
},
{
"Id" : " Bye " ,
"StepType" : " MyApp.GoodbyeWorld, MyApp "
}
]
} Id : HelloWorld
Version : 1
Steps :
- Id : Hello
StepType : MyApp.HelloWorld, MyApp
NextStepId : Bye
- Id : Bye
StepType : MyApp.GoodbyeWorld, MyApp public class MyData
{
public string Email { get ; set ; }
public string Password { get ; set ; }
public string UserId { get ; set ; }
}
public class MyWorkflow : IWorkflow
{
public void Build ( IWorkflowBuilder < MyData > builder )
{
builder
. StartWith < CreateUser > ( )
. Input ( step => step . Email , data => data . Email )
. Input ( step => step . Password , data => data . Password )
. Output ( data => data . UserId , step => step . UserId )
. Then < SendConfirmationEmail > ( )
. WaitFor ( "confirmation" , data => data . UserId )
. Then < UpdateUser > ( )
. Input ( step => step . UserId , data => data . UserId ) ;
}
} public class MyWorkflow : IWorkflow
{
public void Build ( IWorkflowBuilder < MyData > builder )
{
builder
. StartWith < CreateCustomer > ( )
. Then < PushToSalesforce > ( )
. OnError ( WorkflowErrorHandling . Retry , TimeSpan . FromMinutes ( 10 ) )
. Then < PushToERP > ( )
. OnError ( WorkflowErrorHandling . Retry , TimeSpan . FromMinutes ( 10 ) ) ;
}
} builder
. StartWith < LogStart > ( )
. Saga ( saga => saga
. StartWith < Task1 > ( )
. CompensateWith < UndoTask1 > ( )
. Then < Task2 > ( )
. CompensateWith < UndoTask2 > ( )
. Then < Task3 > ( )
. CompensateWith < UndoTask3 > ( )
)
. OnError ( Models . WorkflowErrorHandling . Retry , TimeSpan . FromMinutes ( 10 ) )
. Then < LogEnd > ( ) ; Da Workflows in der Regel langlebige Prozesse sind, müssen sie zwischen den Schritten gespeichert werden. Es gibt mehrere Persistenzanbieter als separate Nuget -Pakete.
Ein Suchindexanbieter kann an den Workflow -Kern angeschlossen werden, sodass Sie Ihre Workflows indexieren und anhand der Daten und des Status von ihnen suchen können. Diese sind auch als separate Nuget -Pakete erhältlich.
Hallo Welt
Mehrere Ergebnisse
Daten übergeben
Parallel nacher
Synchronisieren
Während der Schleife
Wenn Anweisung
Ereignisse
Aktivitätsarbeiter
Parallele Aufgaben
SAGA -Transaktionen (mit Kompensation)
Geplante Hintergrundaufgaben
Wiederkehrende Hintergrundaufgaben
Abhängigkeitsinjektion
Aufgeschobene Ausführung und Wiedereintrittsschritte
Schleifen
Eine REST -API aufdecken
Menschlicher (Benutzer-) Workflow
Testen
Dieses Projekt ist unter der MIT -Lizenz lizenziert - finden Sie in der lizenz.md -Datei für Details