Interface ActorContext<T>
-
- All Superinterfaces:
ClassicActorContextProvider
,TypedActorContext<T>
- All Known Subinterfaces:
ActorContextImpl<T>
public interface ActorContext<T> extends TypedActorContext<T>, ClassicActorContextProvider
An Actor is given by the combination of aBehavior
and a context in which this behavior is executed. As per the Actor Model an Actor can perform the following actions when processing a message:- send a finite number of messages to other Actors it knows - create a finite number of Actors - designate the behavior for the next message
In Pekko, the first capability is accessed by using the
!
ortell
method on anActorRef
, the second is provided byspawn(org.apache.pekko.actor.typed.Behavior<U>, java.lang.String, org.apache.pekko.actor.typed.Props)
and the third is implicit in the signature ofBehavior
in that the next behavior is always returned from the message processing logic.An
ActorContext
in addition provides access to the Actor’s own identity (“self
”), theActorSystem
it is part of, methods for querying the list of child Actors it created, access toTerminated
and timed message scheduling.Not for user extension.
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description ActorContext<T>
asJava()
Get thejavadsl
of thisActorContext
.<Req,Res>
voidask(RecipientRef<Req> target, scala.Function1<ActorRef<Res>,Req> createRequest, scala.Function1<scala.util.Try<Res>,T> mapResponse, Timeout responseTimeout, scala.reflect.ClassTag<Res> classTag)
Perform a single request-response message interaction with another actor, and transform the messages back to the protocol of this actor.<Req,Res>
voidaskWithStatus(RecipientRef<Req> target, scala.Function1<ActorRef<StatusReply<Res>>,Req> createRequest, scala.Function1<scala.util.Try<Res>,T> mapResponse, Timeout responseTimeout, scala.reflect.ClassTag<Res> classTag)
The same as<Req,Res>ask(org.apache.pekko.actor.typed.RecipientRef<Req>,scala.Function1<org.apache.pekko.actor.typed.ActorRef<Res>,Req>,scala.Function1<scala.util.Try<Res>,T>,org.apache.pekko.util.Timeout,scala.reflect.ClassTag<Res>)
but only for requests that result in a response of typepekko.pattern.StatusReply
.void
cancelAllTimers()
INTERNAL APIvoid
cancelReceiveTimeout()
Cancel the sending of receive timeout notifications.void
checkCurrentActorThread()
INTERNAL APIscala.Option<ActorRef<scala.runtime.Nothing$>>
child(java.lang.String name)
The named child Actor if it is alive.scala.collection.Iterable<ActorRef<scala.runtime.Nothing$>>
children()
The list of child Actors created by this Actor during its lifetime that are still alive, in no particular order.void
clearCurrentActorThread()
INTERNAL APIvoid
clearMdc()
INTERNAL APIBehavior<T>
currentBehavior()
INTERNAL APIBehavior<T>
delegate(Behavior<T> delegator, T msg)
Delegate message and signal's execution by givenpekko.actor.typed.Behavior
usingBehavior.interpretMessage
orBehavior.interpretSignal
scala.concurrent.ExecutionContextExecutor
executionContext()
This Actor’s execution context.boolean
hasTimer()
INTERNAL APIorg.slf4j.Logger
log()
An actor specific logger.<U> ActorRef<U>
messageAdapter(scala.Function1<U,T> f, scala.reflect.ClassTag<U> evidence$1)
Create a message adapter that will convert or wrap messages such that other Actor’s protocols can be ingested by this Actor.void
onUnhandled(T msg)
INTERNAL API<Value> void
pipeToSelf(scala.concurrent.Future<Value> future, scala.Function1<scala.util.Try<Value>,T> mapResult)
Sends the result of the givenFuture
to this Actor (“self
”), after adapted it with the given function.<U> Cancellable
scheduleOnce(scala.concurrent.duration.FiniteDuration delay, ActorRef<U> target, U msg)
Schedule the sending of the given message to the given target Actor after the given time period has elapsed.ActorRef<T>
self()
The identity of this Actor, bound to the lifecycle of this Actor instance.void
setCurrentActorThread()
INTERNAL APIvoid
setLoggerName(java.lang.Class<?> clazz)
Replace the current logger (or initialize a new logger if the logger was not touched before) with one that has the given class name as logger name.void
setLoggerName(java.lang.String name)
Replace the current logger (or initialize a new logger if the logger was not touched before) with one that has the given name as logger name.void
setReceiveTimeout(scala.concurrent.duration.FiniteDuration timeout, T msg)
Schedule the sending of a notification in case no other message is received during the given period of time.<U> ActorRef<U>
spawn(Behavior<U> behavior, java.lang.String name, Props props)
Create a child Actor from the givenpekko.actor.typed.Behavior
and with the given name.<U> Props
spawn$default$3()
Create a child Actor from the givenpekko.actor.typed.Behavior
and with the given name.<U> ActorRef<U>
spawnAnonymous(Behavior<U> behavior, Props props)
Create a child Actor from the givenpekko.actor.typed.Behavior
under a randomly chosen name.<U> Props
spawnAnonymous$default$2()
<U> ActorRef<U>
spawnMessageAdapter(scala.Function1<U,T> f)
INTERNAL API: SeespawnMessageAdapter
with name parameter<U> ActorRef<U>
spawnMessageAdapter(scala.Function1<U,T> f, java.lang.String name)
INTERNAL API: It is currently internal because it's too easy to create resource leaks by spawning adapters without stopping them.<U> void
stop(ActorRef<U> child)
Force the child Actor under the given name to terminate after it finishes processing its current message.ActorSystem<scala.runtime.Nothing$>
system()
TheActorSystem
to which this Actor belongs.<U> void
unwatch(ActorRef<U> other)
Revoke the registration established bywatch
.<U> void
watch(ActorRef<U> other)
Register forpekko.actor.typed.Terminated
notification once the Actor identified by the givenActorRef
terminates.<U> void
watchWith(ActorRef<U> other, T msg)
Register for termination notification with a custom message once the Actor identified by the givenActorRef
terminates.-
Methods inherited from interface org.apache.pekko.actor.ClassicActorContextProvider
classicActorContext
-
Methods inherited from interface org.apache.pekko.actor.typed.TypedActorContext
asScala
-
-
-
-
Method Detail
-
asJava
ActorContext<T> asJava()
Get thejavadsl
of thisActorContext
.This method is thread-safe and can be called from other threads than the ordinary actor message processing thread, such as
Future
callbacks.- Specified by:
asJava
in interfaceTypedActorContext<T>
-
ask
<Req,Res> void ask(RecipientRef<Req> target, scala.Function1<ActorRef<Res>,Req> createRequest, scala.Function1<scala.util.Try<Res>,T> mapResponse, Timeout responseTimeout, scala.reflect.ClassTag<Res> classTag)
Perform a single request-response message interaction with another actor, and transform the messages back to the protocol of this actor.The interaction has a timeout (to avoid a resource leak). If the timeout hits without any response it will be passed as a
Failure(
TimeoutException
)
to themapResponse
function (this is the only "normal" way aFailure
is passed to the function).For other messaging patterns with other actors, see
messageAdapter(scala.Function1<U, T>, scala.reflect.ClassTag<U>)
.This method is thread-safe and can be called from other threads than the ordinary actor message processing thread, such as
Future
callbacks.- Parameters:
createRequest
- A function that creates a message for the other actor, containing the providedActorRef[Res]
that the other actor can send a message back through.mapResponse
- Transforms the response from thetarget
into a message this actor understands. Should be a pure function but is executed inside the actor when the response arrives so can safely touch the actor internals. If this function throws an exception it is just as if the normal message receiving logic would throw.
-
askWithStatus
<Req,Res> void askWithStatus(RecipientRef<Req> target, scala.Function1<ActorRef<StatusReply<Res>>,Req> createRequest, scala.Function1<scala.util.Try<Res>,T> mapResponse, Timeout responseTimeout, scala.reflect.ClassTag<Res> classTag)
The same as<Req,Res>ask(org.apache.pekko.actor.typed.RecipientRef<Req>,scala.Function1<org.apache.pekko.actor.typed.ActorRef<Res>,Req>,scala.Function1<scala.util.Try<Res>,T>,org.apache.pekko.util.Timeout,scala.reflect.ClassTag<Res>)
but only for requests that result in a response of typepekko.pattern.StatusReply
. If the response is apekko.pattern.StatusReply.Success
the returned future is completed successfully with the wrapped response. If the status response is apekko.pattern.StatusReply.Error
the returned future will be failed with the exception in the error (normally apekko.pattern.StatusReply.ErrorMessage
).
-
cancelAllTimers
void cancelAllTimers()
INTERNAL API
-
cancelReceiveTimeout
void cancelReceiveTimeout()
Cancel the sending of receive timeout notifications.*Warning*: This method is not thread-safe and must not be accessed from threads other than the ordinary actor message processing thread, such as
Future
callbacks.
-
checkCurrentActorThread
void checkCurrentActorThread()
INTERNAL API
-
child
scala.Option<ActorRef<scala.runtime.Nothing$>> child(java.lang.String name)
The named child Actor if it is alive.*Warning*: This method is not thread-safe and must not be accessed from threads other than the ordinary actor message processing thread, such as
Future
callbacks.
-
children
scala.collection.Iterable<ActorRef<scala.runtime.Nothing$>> children()
The list of child Actors created by this Actor during its lifetime that are still alive, in no particular order.*Warning*: This method is not thread-safe and must not be accessed from threads other than the ordinary actor message processing thread, such as
Future
callbacks.
-
clearCurrentActorThread
void clearCurrentActorThread()
INTERNAL API
-
clearMdc
void clearMdc()
INTERNAL API
-
delegate
Behavior<T> delegate(Behavior<T> delegator, T msg)
Delegate message and signal's execution by givenpekko.actor.typed.Behavior
usingBehavior.interpretMessage
orBehavior.interpretSignal
note: if given
pekko.actor.typed.Behavior
resultingBehaviors.same
that will cause context switching to the given behavior and if result isBehaviors.unhandled
that will trigger thepekko.actor.typed.scaladsl.ActorContext.onUnhandled
then switching to the given behavior.
-
executionContext
scala.concurrent.ExecutionContextExecutor executionContext()
This Actor’s execution context. It can be used to run asynchronous tasks likeFuture
operators.This field is thread-safe and can be called from other threads than the ordinary actor message processing thread, such as
Future
callbacks.
-
hasTimer
boolean hasTimer()
INTERNAL API
-
log
org.slf4j.Logger log()
An actor specific logger.The logger name will be an estimated source class for the actor which is calculated when the logger is first used (the logger is lazily created upon first use). If this yields the wrong class or another class is preferred this can be changed with
setLoggerName
.*Warning*: This method is not thread-safe and must not be accessed from threads other than the ordinary actor message processing thread, such as
Future
callbacks.
-
messageAdapter
<U> ActorRef<U> messageAdapter(scala.Function1<U,T> f, scala.reflect.ClassTag<U> evidence$1)
Create a message adapter that will convert or wrap messages such that other Actor’s protocols can be ingested by this Actor.You can register several message adapters for different message classes. It's only possible to have one message adapter per message class to make sure that the number of adapters are not growing unbounded if registered repeatedly. That also means that a registered adapter will replace an existing adapter for the same message class.
A message adapter will be used if the message class matches the given class or is a subclass thereof. The registered adapters are tried in reverse order of their registration order, i.e. the last registered first.
A message adapter (and the returned
ActorRef
) has the same lifecycle as this actor. It's recommended to register the adapters in a top levelBehaviors.setup
or constructor ofAbstractBehavior
but it's possible to register them later also if needed. Message adapters don't have to be stopped since they consume no resources other than an entry in an internalMap
and the number of adapters are bounded since it's only possible to have one per message class. * The function is running in this actor and can safely access state of it.*Warning*: This method is not thread-safe and must not be accessed from threads other than the ordinary actor message processing thread, such as
Future
callbacks.
-
onUnhandled
void onUnhandled(T msg)
INTERNAL API
-
pipeToSelf
<Value> void pipeToSelf(scala.concurrent.Future<Value> future, scala.Function1<scala.util.Try<Value>,T> mapResult)
Sends the result of the givenFuture
to this Actor (“self
”), after adapted it with the given function.This method is thread-safe and can be called from other threads than the ordinary actor message processing thread, such as
Future
callbacks.
-
scheduleOnce
<U> Cancellable scheduleOnce(scala.concurrent.duration.FiniteDuration delay, ActorRef<U> target, U msg)
Schedule the sending of the given message to the given target Actor after the given time period has elapsed. The scheduled action can be cancelled by invokingpekko.actor.Cancellable#cancel
on the returned handle.This method is thread-safe and can be called from other threads than the ordinary actor message processing thread, such as
Future
callbacks.
-
self
ActorRef<T> self()
The identity of this Actor, bound to the lifecycle of this Actor instance. An Actor with the same name that lives before or after this instance will have a differentActorRef
.This field is thread-safe and can be called from other threads than the ordinary actor message processing thread, such as
Future
callbacks.
-
setCurrentActorThread
void setCurrentActorThread()
INTERNAL API
-
setLoggerName
void setLoggerName(java.lang.String name)
Replace the current logger (or initialize a new logger if the logger was not touched before) with one that has the given name as logger name. Logger source MDC entry "pekkoSource" will be the actor path.*Warning*: This method is not thread-safe and must not be accessed from threads other than the ordinary actor message processing thread, such as
CompletionStage
callbacks.
-
setLoggerName
void setLoggerName(java.lang.Class<?> clazz)
Replace the current logger (or initialize a new logger if the logger was not touched before) with one that has the given class name as logger name. Logger source MDC entry "pekkoSource" will be the actor path.*Warning*: This method is not thread-safe and must not be accessed from threads other than the ordinary actor message processing thread, such as
Future
callbacks.
-
setReceiveTimeout
void setReceiveTimeout(scala.concurrent.duration.FiniteDuration timeout, T msg)
Schedule the sending of a notification in case no other message is received during the given period of time. The timeout starts anew with each received message. UsecancelReceiveTimeout
to switch off this mechanism.*Warning*: This method is not thread-safe and must not be accessed from threads other than the ordinary actor message processing thread, such as
Future
callbacks.
-
spawn
<U> ActorRef<U> spawn(Behavior<U> behavior, java.lang.String name, Props props)
Create a child Actor from the givenpekko.actor.typed.Behavior
and with the given name.*Warning*: This method is not thread-safe and must not be accessed from threads other than the ordinary actor message processing thread, such as
Future
callbacks.
-
spawn$default$3
<U> Props spawn$default$3()
Create a child Actor from the givenpekko.actor.typed.Behavior
and with the given name.*Warning*: This method is not thread-safe and must not be accessed from threads other than the ordinary actor message processing thread, such as
Future
callbacks.
-
spawnAnonymous
<U> ActorRef<U> spawnAnonymous(Behavior<U> behavior, Props props)
Create a child Actor from the givenpekko.actor.typed.Behavior
under a randomly chosen name. It is good practice to name Actors wherever practical.*Warning*: This method is not thread-safe and must not be accessed from threads other than the ordinary actor message processing thread, such as
Future
callbacks.
-
spawnAnonymous$default$2
<U> Props spawnAnonymous$default$2()
-
spawnMessageAdapter
<U> ActorRef<U> spawnMessageAdapter(scala.Function1<U,T> f, java.lang.String name)
INTERNAL API: It is currently internal because it's too easy to create resource leaks by spawning adapters without stopping them.messageAdapter
is the public API.Create a "lightweight" child actor that will convert or wrap messages such that other Actor’s protocols can be ingested by this Actor. You are strongly advised to cache these ActorRefs or to stop them when no longer needed.
The name of the child actor will be composed of a unique identifier starting with a dollar sign to which the given
name
argument is appended, with an inserted hyphen between these two parts. Therefore the givenname
argument does not need to be unique within the scope of the parent actor.The function is applied inside the "parent" actor and can safely access state of the "parent".
-
spawnMessageAdapter
<U> ActorRef<U> spawnMessageAdapter(scala.Function1<U,T> f)
INTERNAL API: SeespawnMessageAdapter
with name parameter
-
stop
<U> void stop(ActorRef<U> child)
Force the child Actor under the given name to terminate after it finishes processing its current message. Nothing happens if the ActorRef is a child that is already stopped.*Warning*: This method is not thread-safe and must not be accessed from threads other than the ordinary actor message processing thread, such as
Future
callbacks.- Throws:
java.lang.IllegalArgumentException
- if the given actor ref is not a direct child of this actor
-
system
ActorSystem<scala.runtime.Nothing$> system()
TheActorSystem
to which this Actor belongs.This field is thread-safe and can be called from other threads than the ordinary actor message processing thread, such as
Future
callbacks.
-
unwatch
<U> void unwatch(ActorRef<U> other)
Revoke the registration established bywatch
. ATerminated
notification will not subsequently be received for the referenced Actor.*Warning*: This method is not thread-safe and must not be accessed from threads other than the ordinary actor message processing thread, such as
Future
callbacks.
-
watch
<U> void watch(ActorRef<U> other)
Register forpekko.actor.typed.Terminated
notification once the Actor identified by the givenActorRef
terminates. This message is also sent when the watched actor is on a node that has been removed from the cluster when using Pekko Cluster.watch
is idempotent if it is not mixed withwatchWith
.It will fail with an
IllegalStateException
if the same subject was watched before usingwatchWith
. To clear the termination message, unwatch first.*Warning*: This method is not thread-safe and must not be accessed from threads other than the ordinary actor message processing thread, such as
Future
callbacks.
-
watchWith
<U> void watchWith(ActorRef<U> other, T msg)
Register for termination notification with a custom message once the Actor identified by the givenActorRef
terminates. This message is also sent when the watched actor is on a node that has been removed from the cluster when using using Pekko Cluster.watchWith
is idempotent if it is called with the samemsg
and not mixed withwatch
.It will fail with an
IllegalStateException
if the same subject was watched before usingwatch
orwatchWith
with another termination message. To change the termination message, unwatch first.*Warning*: This method is not thread-safe and must not be accessed from threads other than the ordinary actor message processing thread, such as
Future
callbacks.
-
-