Le noyau du flux de travail est un moteur de workflow de travail intégré léger ciblant la norme .NET. Pensez: des processus de longue durée avec plusieurs tâches qui doivent suivre l'état. Il soutient les fournisseurs de persistance et de concurrence enfichables pour permettre des clusters multi-nœuds.
Le conducteur est un serveur de flux de travail autonome par opposition à une bibliothèque qui utilise le noyau de workflow en interne. Il expose une API qui vous permet de stocker des définitions de workflow, de suivre les workflows en cours d'exécution, de gérer les événements et de définir des étapes et des scripts personnalisés pour l'utilisation dans vos workflows.
https://github.com/danielgerlag/conductor
Voir le tutoriel ici.
Définissez vos flux de travail avec l'API courante.
public class MyWorkflow : IWorkflow
{
public void Build ( IWorkflowBuilder < MyData > builder )
{
builder
. StartWith < Task1 > ( )
. Then < Task2 > ( )
. Then < Task3 > ( ) ;
}
} Définissez vos workflows dans JSON ou YAML, devez installer WorkflowCore.dsl
{
"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 > ( ) ; Étant donné que les workflows sont généralement des processus en cours d'exécution, ils devront être persistés pour le stockage entre les étapes. Il existe plusieurs fournisseurs de persistance disponibles en tant que forfaits NuGet distincts.
Un fournisseur d'index de recherche peut être branché sur Workflow Core, vous permettant d'indexer vos workflows et de rechercher par rapport aux données et à leur état. Ceux-ci sont également disponibles sous forme de packages NuGet séparés.
Bonjour le monde
Résultats multiples
Passer des données
Foraire parallèle
Sync Forach
Pendant la boucle
Si déclaration
Événements
Travailleurs de l'activité
Tâches parallèles
Transactions de saga (avec compensation)
Tâches de fond planifiées
Tâches de fond récurrentes
Injection de dépendance
Exécution différée et étapes de renseignement
Boucle
Exposer une API REST
Flux de travail humain (utilisateur)
Essai
Ce projet est sous licence en vertu de la licence MIT - voir le fichier licence.md pour plus de détails