Coreflow Core - это встроенный встраиваемый рабочный двигатель рабочего процесса .NET .NET Стандарт. Подумайте: длительные процессы с несколькими задачами, которые должны отслеживать состояние. Он поддерживает поставщиков устойчивости и параллелистики, чтобы обеспечить многозвековые кластеры.
Проводник является автономным сервером рабочих процессов, в отличие от библиотеки, которая использует ядро рабочего процесса внутри. Он разоблачает API, который позволяет вам хранить определения рабочего процесса, отслеживать рабочие процессы, управлять событиями и определять пользовательские шаги и сценарии для использования в ваших рабочих процессах.
https://github.com/danielgerlag/conductor
Смотрите учебник здесь.
Определите свои рабочие процессы с помощью Fluent API.
public class MyWorkflow : IWorkflow
{
public void Build ( IWorkflowBuilder < MyData > builder )
{
builder
. StartWith < Task1 > ( )
. Then < Task2 > ( )
. Then < Task3 > ( ) ;
}
} Определите свои рабочие процессы в JSON или YAML, необходимо установить 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 > ( ) ; Поскольку рабочие процессы, как правило, являются длительными процессами, их необходимо будет сохраняться для хранения между шагами. Есть несколько поставщиков постоянств, доступных в качестве отдельных пакетов Nuget.
Поставщик индекса поиска может быть подключен к ядру рабочего процесса, что позволяет индексировать ваши рабочие процессы и искать данные и их состояние. Они также доступны в виде отдельных пакетов Nuget.
Привет, мир
Несколько результатов
Передача данных
Параллельная Фореш
Синхронизация Foreach
В то время как петля
Если утверждение
События
Работники деятельности
Параллельные задачи
Транзакции SAGA (с компенсацией)
Запланированные фоновые задачи
Повторяющиеся фоновые задачи
Инъекция зависимости
Отложенные шаги выполнения и повторного входа
Петля
Разоблачение API отдыха
Человеческий (пользовательский) рабочий процесс
Тестирование
Этот проект лицензирован по лицензии MIT - для получения подробной информации см.