ActorFlow.askWithContext
Use the “Ask Pattern” to send each stream element (without the context) as an ask
to the target actor (of the new actors API), and expect a reply of Type StatusReply[T]
StatusReply<T>
where the T will be unwrapped and emitted downstream.
Dependency
This operator is included in:
- sbt
val PekkoVersion = "1.0.1" libraryDependencies += "org.apache.pekko" %% "pekko-stream-typed" % PekkoVersion
- Maven
<properties> <scala.binary.version>2.13</scala.binary.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.apache.pekko</groupId> <artifactId>pekko-bom_${scala.binary.version}</artifactId> <version>1.0.1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.apache.pekko</groupId> <artifactId>pekko-stream-typed_${scala.binary.version}</artifactId> </dependency> </dependencies>
- Gradle
def versions = [ ScalaBinary: "2.13" ] dependencies { implementation platform("org.apache.pekko:pekko-bom_${versions.ScalaBinary}:1.0.1") implementation "org.apache.pekko:pekko-stream-typed_${versions.ScalaBinary}" }
Signature
ActorFlow.askWithStatusAndContext
ActorFlow.askWithStatusAndContext
{ scala=“#askWithStatusAndContextI,Q,A,Ctx(ref:org.apache.pekko.actor.typed.ActorRef[Q])(makeMessage:(I,org.apache.pekko.actor.typed.ActorRef[org.apache.pekko.pattern.StatusReply[A]])=>Q)(implicittimeout:org.apache.pekko.util.Timeout):org.apache.pekko.stream.scaladsl.Flow[(I,Ctx),(A,Ctx),org.apache.pekko.NotUsed]” java =“#askWithStatusAndContextI,Q,A,Ctx” }
Description
Use the Ask pattern to send a request-reply message to the target ref
actor when you expect the reply to be org.apache.pekko.pattern.StatusReply
. The stream context is not sent, instead it is locally recombined to the actor’s reply.
If any of the asks times out it will fail the stream with an AskTimeoutException
AskTimeoutException
.
The ask
operator requires
- the actor
ref
, - a
makeMessage
function to create the message sent to the actor from the incoming element, and the actor ref accepting the actor’s reply message - a timeout.
Reactive Streams semantics
emits when the futures (in submission order) created by the ask pattern internally are completed
backpressures when the number of futures reaches the configured parallelism and the downstream backpressures
completes when upstream completes and all futures have been completed and all elements have been emitted
fails when the passed-in actor terminates, or when any of the ask
s exceed a timeout
cancels when downstream cancels