Download the PHP package mead-steve/tale without Composer
On this page you can find all versions of the php package mead-steve/tale. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package tale
Tale
What?
Tale is a small library to help write a "distributed transaction like" object across a number of services. It's loosely based on the saga pattern. A good intro is available on the couchbase blog: https://blog.couchbase.com/saga-pattern-implement-business-transactions-using-microservices-part/
Installation
Example Usage
An example use case of this would be some holiday booking software broken down into a few services.
Assuming we have the following services: Flight booking API, Hotel booking API, and a Customer API.
We'd write the following steps:
and so on for any of the steps needed. Then in whatever is handling the user's request a distributed transaction can be built:
If any step along the way fails then the compensate method on each step is called in reverse order until everything is undone.
State immutability
The current state is passed from one step to the next. This same state is also used to compensate for the transactions in the event of a failure further on in the transaction. Since this is the case it is important that implementations consider making the state immutable.
Tale provides a CloneableState
interface to help with this. Any state implementing
this interface will have its cloneState
method called before being passed to a step
ensuring that steps won't share references to the same state.
In the example above $startingState
, $finalState
and $state
given to both function
calls are all clones of each other so changing one won't affect any earlier states.
Testing / Development
Contributions are very welcome. Please open an issue first if the change is large or will break backwards compatibility.
All builds must pass the travis tests before merge.
Running ./run_tests.sh
will run the same tests as travis.yml but locally.
The dockerfile provides an environment that can execute all the tests & static analysis.