This documentation regards version 2.9.7, however the current version is 2.10.0 .
Futures patterns
Dependency
The Akka dependencies are available from Akka’s library repository. To access them there, you need to configure the URL for this repository.
sbt resolvers += "Akka library repository" . at ( "https://repo.akka.io/maven" )
Maven <project>
...
<repositories>
<repository>
<id> akka-repository </id>
<name> Akka library repository </name>
<url> https://repo.akka.io/maven </url>
</repository>
</repositories>
</project>
Gradle repositories {
mavenCentral ()
maven {
url "https://repo.akka.io/maven"
}
}
Akka offers tiny helpers for use with Future
sCompletionStage
. These are part of Akka’s core module:
sbt val AkkaVersion = "2.9.7"
libraryDependencies += "com.typesafe.akka" %% "akka-actor" % AkkaVersion
Maven <properties>
<scala.binary.version> 2.13 </scala.binary.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId> com.typesafe.akka </groupId>
<artifactId> akka-bom_${scala.binary.version} </artifactId>
<version> 2.9.7 </version>
<type> pom </type>
<scope> import </scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId> com.typesafe.akka </groupId>
<artifactId> akka-actor_${scala.binary.version} </artifactId>
</dependency>
</dependencies>
Gradle def versions = [
ScalaBinary : "2.13"
]
dependencies {
implementation platform ( "com.typesafe.akka:akka-bom_${versions.ScalaBinary}:2.9.7" )
implementation "com.typesafe.akka:akka-actor_${versions.ScalaBinary}"
}
After
akka.pattern.after
akka.pattern.Patterns.after
makes it easy to complete a Future
CompletionStage
with a value or exception after a timeout.
Scala
copy source val delayed =
akka . pattern . after ( 200.millis )( Future . failed ( new IllegalStateException ( "OHNOES" )))
val future = Future { Thread . sleep ( 1000 ); "foo" }
val result = Future . firstCompletedOf ( Seq ( future , delayed ))
Java
copy source import akka . pattern . Patterns ;
CompletionStage < String > failWithException =
CompletableFuture . supplyAsync (
() -> {
throw new IllegalStateException ( "OHNOES1" );
});
CompletionStage < String > delayed =
Patterns . after ( Duration . ofMillis ( 200 ), system , () -> failWithException );
Retry
akka.pattern.retry
akka.pattern.Patterns.retry
will retry a Future
CompletionStage
some number of times with a delay between each attempt.
Scala
copy source import akka . actor . typed . scaladsl . adapter . _
implicit val scheduler : akka . actor . Scheduler = system . scheduler . toClassic
implicit val ec : ExecutionContext = system . executionContext
//Given some future that will succeed eventually
@volatile var failCount = 0
def futureToAttempt () = {
if ( failCount < 5 ) {
failCount += 1
Future . failed ( new IllegalStateException ( failCount . toString ))
} else Future . successful ( 5 )
}
//Return a new future that will retry up to 10 times
val retried : Future [ Int ] = akka . pattern . retry (() => futureToAttempt (), attempts = 10 , 100 milliseconds )
Java
copy source import akka . pattern . Patterns ;
Callable < CompletionStage < String >> attempt = () -> CompletableFuture . completedFuture ( "test" );
CompletionStage < String > retriedFuture =
Patterns . retry ( attempt , 3 , java . time . Duration . ofMillis ( 200 ), system );
Found an error in this documentation? The source code for this page can be found
here .
Please feel free to edit and contribute a pull request.