Amazon's Simple Workflow (SWF) service provides a scalable platform for automating processes, or workflows in your application. It centers around the concept of tasks. Each task will fall into one of two categories:
- Activity task - for doing actual work, e.g. processing an order, taking data from one location to another
- Decision task - for deciding what's the next step in the workflow given its current state
Tasks are distributed to 'workers' with polling, and like Simple Queuing Service (SQS), each task can be received by one worker at a time and the worker has certain amount of time to complete the task and responds with a completion message or the task will be timed out (and can be retried up to some configured number of times). For long running activity tasks, the worker might also need to record periodic heartbeats, or the task might be marked as failed or timed out.
Every step of a workflow execution is recorded in SWF and you can retrieve the full history of events that had occurred during a workflow either programmatically or via the Amazon Management Console.
You can also easily terminate or rerun a workflow with a few button clicks in the Amazon Management Console, should you choose to.
The standard Amazon SDK provides a AWS Flow Framework, but it's only available for Java.
The facilities provided by the .Net SDK is a straight mapping to the actions available on the SWF service. Using these actions alone, it's cumbersome to build any sort of useful process out of SWF because you need to take care of a lot of plumbing yourself, including:
- handle task polling
- handle exceptions (and retries) when polling tasks
- differentiate different types of tasks
- record heartbeats periodically
- respond completed message on successful completion
- respond failed message on exceptions during processing of a task
The goal of this project is to provide a framework that allows you to design and implement a workflow using SWF with as little friction in the development process as possible.
Check out the Wiki page for a list of examples.
I also have a series of introductory posts on how to use the library to model workflows:
- High Level Overview
- Part 1 - Hello World
- Part 2 - Beyond Hello World
- Part 3 - Parallelizing activities
- Part 4 - Child Workflows (coming soon)
- Part 5 - Retries (coming soon)
Download and install using NuGet.
You can view the full release notes here.
Please follow the official twitter account @swf_extensions for updates, and feel free to send me any feedbacks or questions you have about the project :-)