Reactor is a dynamic, concurrent, dependency resolving saga orchestrator.
Woah. That's a lot. Let's break it down:
- Saga orchestrator A saga is a way of providing transaction-like semantics across multiple distinct resources.
- Dependency resolving reactor allows you to describe the dependencies between your saga steps using arguments which are converted into a DAG and used to compute execution order.
- Concurrent unless otherwise specified reactor will run as many steps as possible concurrently whilst taking into account the results of the dependency resolution.
- Dynamic whilst you can define a reactor statically using our awesome DSL, you can also build workflows dynamically - and even add steps while the reactor is running.
Thanks to Alembic Pty Ltd for sponsoring a portion of this project's development.
The package can be installed by adding reactor
to your list of dependencies in mix.exs
:
def deps do
[
{:reactor, "~> 0.10.3"}
]
end
Documentation for the latest release will be available on
hexdocs and for the main
branch.
- To contribute updates, fixes or new features please fork and open a
pull-request against
main
. - Please use conventional commits - this allows us to dynamically generate the changelog.
- Feel free to ask any questions on the
#reactor
channel on the Ash Discord.
reactor
is licensed under the terms of the MIT
license. See the LICENSE
file in this
repository
for details.