blob: 40c81184da7d98212d168c3acbfaf196032dd2e8 [file] [log] [blame] [view]
# Apache Safeguard
Apache Safeguard is a library around Fault Tolerance, giving your application resilience in a highly distributed microservices framework. It is designed for use with CDI applications.
## What is Fault Tolerance?
In today's microservices runtimes, Fault Tolerance allows an application to handle the situations where another service it is consuming is unavialable.
## Types of Fault Tolerance
Fault Tolerance is a broad subject, has multiple areas of support typically found in a framework.
### Fallback
When a given invocation fails, you can declare a Fallback for that method.
### Timeout
Allows method invocations to be bounded to a specific duration. Once that boundary hits, an exception is thrown or a fallback is invoked.
### Retry
Allows a method to be invoked a number of times, as well as for a given duration.
### Circuit Breaker
Allows invocations to a given method as long as it is returning successfully. Based on thresholds defined, when a method begins failing invocations will be blocked. After a duration has passed invocations will begin to attempt again.
### Bulkhead
A bulkhead throttles concurrent access to a method. The throttling can either by based on a semaphore or a thread pool. Semaphores are invoked on the caller's thread and are not bound by any limit to pending requests. Thread pools are used to invoke the component asynchronously and have a finite amount of waiting invocations.
## Getting Started
Apache Safeguard is currently in development. You can use our snapshots from the Apache Snapshots repository. These builds are in no way endorsed.
```xml
<repositories>
<repository>
<id>apache-snapshot-repository</id>
<url>http://repository.apache.org/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<artifactId>safeguard-api</artifactId>
<groupId>org.apache.geronimo.safeguard</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>safeguard-impl</artifactId>
<groupId>org.apache.geronimo.safeguard</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
```
Apache Safeguard implements the [MicroProfile Fault Tolerance v1.0 specification](https://github.com/eclipse/microprofile-fault-tolerance/releases/tag/1.0)