What is Conductor?
- Conductor is an open-source, Apache 2.0 licensed microservices and workflow orchestration framework
- Build stateful applications without the overhead of managing a state machine
- Enables development of highly resilient and scalable distributed systems with built-in features that empower rapid development of business applications
- Used for a wide range of use cases such as - business process automations, data pipelines, CI/CD pipelines, order management workflows etc.
- Run 100s to millions of workflows per day - scales seamlessly for a wide range of applications
- Build workflows using many popular languages with SDKs
Why should we use Conductor?
- Lets us focus on coding the business logic of the application instead of managing the state and complexities of a distributed ecosystem
- We can cleanly decouple the design of the application flow from the implementation
- Application's resilience is increased with native support in Conductor for retries, error handling alongside rich metrics
- We have powerful visualizations of your application’s execution paths that can shorten debugging times from hours to minutes
What can we build with Conductor?
- Applications composed of distributed microservices or serverless functions
- Hybrid applications that span across multiple deployment models (e.g. VM deployed monolith, kubernetes deployed containers)
- Long running workflows that need to wait for days, months or even years between executions (e.g. monthly or yearly subscription billing)
- Mission critical applications with high reliability requirements (e.g. financial transactions)
Your First Workflow Task
- Java
- Python
- Go
@Override
public TaskResult execute(Task task) {
TaskResult result = new TaskResult(task);
result.setStatus(TaskResult.Status.COMPLETED);
String currentTimeOnServer = Instant.now().toString();
result.addOutputData("currentTimeOnServer", currentTimeOnServer);
result.addOutputData("message", "Hello World!");
return result;
}
class SimplePythonWorker(WorkerInterface):
def execute(self, task):
task_result = self.get_task_result_from_task(task)
task_result.add_output_data('message', 'Hello World')
task_result.status = 'COMPLETED'
return task_result
func Hello_World_Execute_Function(t *task.Task) (taskResult *task.TaskResult, err error) {
taskResult = task.NewTaskResult(t)
output := map[string]interface{}{"message":"Hello World"}
taskResult.OutputData = output
taskResult.Status = "COMPLETED"
err = nil
return taskResult, err
}