Add docs for circuit breaker new feature #22596

This commit is contained in:
Qing Wei, Lim 2017-03-30 15:51:51 +01:00 committed by Johan Andrén
parent 626d07edca
commit d3de9d40cd
3 changed files with 106 additions and 4 deletions

View file

@ -11,6 +11,7 @@ import akka.pattern.pipe
import akka.actor.{ Actor, ActorLogging, ActorRef }
import scala.concurrent.Future
import scala.util.{ Failure, Success, Try }
//#imports1
@ -76,3 +77,29 @@ class TellPatternActor(recipient: ActorRef) extends Actor with ActorLogging {
}
//#circuit-breaker-tell-pattern
}
class EvenNoFailureActor extends Actor {
import context.dispatcher
//#even-no-as-failure
def luckyNumber(): Future[Int] = {
val evenNumberAsFailure: Try[Int] => Boolean = {
case Success(n) => n % 2 == 0
case Failure(_) => true
}
val breaker =
new CircuitBreaker(
context.system.scheduler,
maxFailures = 5,
callTimeout = 10.seconds,
resetTimeout = 1.minute)
// this call will return 8888 and increase failure count at the same time
breaker.withCircuitBreaker(Future(8888), evenNumberAsFailure)
}
//#even-no-as-failure
override def receive = {
case x: Int =>
}
}

View file

@ -0,0 +1,33 @@
package docs.circuitbreaker;
import akka.actor.AbstractActor;
import akka.pattern.CircuitBreaker;
import scala.concurrent.duration.Duration;
import java.util.Optional;
import java.util.function.BiFunction;
public class EvenNoFailureJavaExample extends AbstractActor {
//#even-no-as-failure
private final CircuitBreaker breaker;
public EvenNoFailureJavaExample() {
this.breaker = new CircuitBreaker(
getContext().dispatcher(), getContext().system().scheduler(),
5, Duration.create(10, "s"), Duration.create(1, "m"));
}
public int luckyNumber() {
BiFunction<Optional<Integer>, Optional<Throwable>, Boolean> evenNoAsFailure =
(result, err) -> (result.isPresent() && result.get() % 2 == 0);
// this will return 8888 and increase failure count at the same time
return this.breaker.callWithSyncCircuitBreaker(() -> 8888, evenNoAsFailure);
}
//#even-no-as-failure
@Override
public Receive createReceive() {
return null;
}
}