O núcleo do fluxo de trabalho é um direcionamento do motor de fluxo de trabalho incorporado em peso leve .NET padrão. Pense: processos de longa execução com várias tarefas que precisam rastrear o estado. Ele suporta provedores de persistência e simultaneidade de persistência para permitir clusters de vários nós.
O condutor é um servidor de fluxo de trabalho independente, em oposição a uma biblioteca que usa o núcleo do fluxo de trabalho internamente. Ele expõe uma API que permite armazenar definições de fluxo de trabalho, rastrear fluxos de trabalho em execução, gerenciar eventos e definir etapas e scripts personalizados para uso em seus fluxos de trabalho.
https://github.com/danielgerlag/conductor
Veja o tutorial aqui.
Defina seus fluxos de trabalho com a API fluente.
public class MyWorkflow : IWorkflow
{
public void Build ( IWorkflowBuilder < MyData > builder )
{
builder
. StartWith < Task1 > ( )
. Then < Task2 > ( )
. Then < Task3 > ( ) ;
}
} Defina seus fluxos de trabalho em JSON ou YAML, precisa instalar o 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 > ( ) ; Como os fluxos de trabalho são normalmente processos de execução longa, eles precisam persistir para o armazenamento entre as etapas. Existem vários provedores de persistência disponíveis como pacotes NUGET separados.
Um provedor de índice de pesquisa pode ser conectado ao núcleo do fluxo de trabalho, permitindo indexar seus fluxos de trabalho e pesquisar contra os dados e o estado deles. Estes também estão disponíveis como pacotes NUGET separados.
Olá mundo
Múltiplos resultados
Dados passando
Paralelo foreach
Sincronize foreach
Enquanto loop
If Declaração
Eventos
Trabalhadores atividades
Tarefas paralelas
Transações da saga (com compensação)
Tarefas de segundo plano programadas
Tarefas de fundo recorrentes
Injeção de dependência
Execução diferida e etapas reentrantes
Looping
Expondo uma API REST
Fluxo de trabalho humano (usuário)
Teste
Este projeto está licenciado sob a licença do MIT - consulte o arquivo License.md para obter detalhes