2023-04-19 10:23:04 +12:00
|
|
|
# Reactor
|
|
|
|
|
2023-05-10 16:27:18 +12:00
|
|
|
![Elixir CI](https://github.com/ash-project/reactor/actions/workflows/elixir.yml/badge.svg)
|
|
|
|
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
|
|
|
|
[![Hex version badge](https://img.shields.io/hexpm/v/reactor.svg)](https://hex.pm/packages/reactor)
|
2023-04-19 10:23:04 +12:00
|
|
|
|
2023-05-10 16:27:18 +12:00
|
|
|
Reactor is a dynamic, concurrent, dependency resolving saga orchestrator.
|
2023-04-19 10:23:04 +12:00
|
|
|
|
2023-05-10 16:27:18 +12:00
|
|
|
Woah. That's a lot. Let's break it down:
|
2023-04-19 12:16:50 +12:00
|
|
|
|
2023-05-10 16:27:18 +12:00
|
|
|
- **Saga orchestrator** A [saga][saga pattern] 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][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.
|
2023-04-19 12:16:50 +12:00
|
|
|
|
2023-05-10 16:27:18 +12:00
|
|
|
[saga pattern](https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/saga/saga)
|
2023-04-19 12:16:50 +12:00
|
|
|
|
2023-06-15 11:42:56 +12:00
|
|
|
## Sponsors
|
|
|
|
|
|
|
|
Thanks to [Alembic Pty Ltd](https://alembic.com.au/) for sponsoring a portion of
|
|
|
|
this project's development.
|
|
|
|
|
2023-05-10 16:27:18 +12:00
|
|
|
## Installation
|
2023-04-19 12:16:50 +12:00
|
|
|
|
2023-05-10 16:27:18 +12:00
|
|
|
The package can be installed by adding `reactor` to your list of dependencies in `mix.exs`:
|
2023-04-19 12:16:50 +12:00
|
|
|
|
2023-05-10 16:27:18 +12:00
|
|
|
```elixir
|
|
|
|
def deps do
|
|
|
|
[
|
2023-06-15 16:40:20 +12:00
|
|
|
{:reactor, "~> 0.2.4"}
|
2023-05-10 16:27:18 +12:00
|
|
|
]
|
2023-04-19 10:23:04 +12:00
|
|
|
end
|
|
|
|
```
|
|
|
|
|
2023-05-10 16:27:18 +12:00
|
|
|
## Documentation
|
2023-04-19 12:16:50 +12:00
|
|
|
|
2023-05-10 16:27:18 +12:00
|
|
|
Documentation for the latest release will be [available on
|
|
|
|
hexdocs](https://hexdocs.pm/reactor) and for the [`main`
|
|
|
|
branch](https://ash-project.github.io/reactor).
|
2023-04-19 12:16:50 +12:00
|
|
|
|
2023-05-10 16:27:18 +12:00
|
|
|
## Contributing
|
2023-04-19 12:16:50 +12:00
|
|
|
|
2023-05-10 16:27:18 +12:00
|
|
|
- To contribute updates, fixes or new features please fork and open a
|
|
|
|
pull-request against `main`.
|
|
|
|
- Please use [conventional
|
|
|
|
commits](https://www.conventionalcommits.org/en/v1.0.0/) - this allows us to
|
|
|
|
dynamically generate the changelog.
|
|
|
|
- Feel free to ask any questions on the `#reactor` channel on the [Ash
|
|
|
|
Discord](https://discord.gg/D7FNG2q).
|
2023-04-19 12:16:50 +12:00
|
|
|
|
2023-05-10 16:27:18 +12:00
|
|
|
## Licence
|
2023-04-19 10:23:04 +12:00
|
|
|
|
2023-05-10 16:27:18 +12:00
|
|
|
`reactor` is licensed under the terms of the [MIT
|
|
|
|
license](https://opensource.org/licenses/MIT). See the [`LICENSE` file in this
|
|
|
|
repository](https://github.com/ash-project/reactor/blob/main/LICENSE)
|
|
|
|
for details.
|
2023-04-19 12:16:50 +12:00
|
|
|
|
2023-06-15 19:35:11 +12:00
|
|
|
[saga pattern]: https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/saga/saga
|
2023-05-10 16:27:18 +12:00
|
|
|
[dag]: https://en.wikipedia.org/wiki/Directed_acyclic_graph
|