Class Behaviors
- java.lang.Object
-
- akka.actor.typed.javadsl.Behaviors
-
public class Behaviors extends java.lang.Object
setup
is a factory for a behavior. Creation of the behavior instance is deferred until the actor is started, as opposed toreceive(akka.japi.function.Function2<akka.actor.typed.javadsl.ActorContext<T>, T, akka.actor.typed.Behavior<T>>)
that creates the behavior instance immediately before the actor is running. Thefactory
function pass theActorContext
as parameter and that can for example be used for spawning child actors.setup
is typically used as the outer most behavior when spawning an actor, but it can also be returned as the next behavior when processing a message or signal. In that case it will be started immediately after it is returned, i.e. next message will be processed by the started behavior.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
Behaviors.Supervise<T>
Specify theSupervisorStrategy
to be invoked when the wrapped behavior throws.
-
Constructor Summary
Constructors Constructor Description Behaviors()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static <T> Behavior<T>
empty()
A behavior that treats every incoming message as unhandled.static <T> Behavior<T>
ignore()
A behavior that ignores every incoming message and returns “same”.static <O,I>
Behavior<O>intercept(BehaviorInterceptor<O,I> behaviorInterceptor, Behavior<I> behavior)
Intercept messages and signals for abehavior
by first passing them to aBehaviorInterceptor
static <T> Behavior<T>
logMessages(Behavior<T> behavior)
Behavior decorator that logs all messages to theBehavior
using the providedLogOptions
default configuration before invoking the wrapped behavior.static <T> Behavior<T>
logMessages(LogOptions logOptions, Behavior<T> behavior)
Behavior decorator that logs all messages to theBehavior
using the providedLogOptions
configuration before invoking the wrapped behavior.static <T> Behavior<T>
monitor(ActorRef<T> monitor, Behavior<T> behavior)
Behavior decorator that copies all received message to the designated monitorActorRef
before invoking the wrapped behavior.static <T> Behavior<T>
receive(Function2<ActorContext<T>,T,Behavior<T>> onMessage)
Construct an actor behavior that can react to incoming messages but not to lifecycle signals.static <T> Behavior<T>
receive(Function2<ActorContext<T>,T,Behavior<T>> onMessage, Function2<ActorContext<T>,Signal,Behavior<T>> onSignal)
Construct an actor behavior that can react to both incoming messages and lifecycle signals.static <T> BehaviorBuilder<T>
receive(java.lang.Class<T> type)
Constructs an actor behavior builder that can build a behavior that can react to both incoming messages and lifecycle signals.static <T> Behavior<T>
receiveMessage(Function<T,Behavior<T>> onMessage)
Simplified version of<T>receive(akka.japi.function.Function2<akka.actor.typed.javadsl.ActorContext<T>,T,akka.actor.typed.Behavior<T>>)
with only a single argument - the message to be handled.static <T> Behavior<T>
receiveSignal(Function2<ActorContext<T>,Signal,Behavior<T>> handler)
Construct an actor behavior that can react to lifecycle signals only.static <T> Behavior<T>
same()
Return this behavior from message processing in order to advise the system to reuse the previous behavior.static <T> Behavior<T>
setup(Function<ActorContext<T>,Behavior<T>> factory)
setup
is a factory for a behavior.static <T> Behavior<T>
stopped()
Return this behavior from message processing to signal that this actor shall terminate voluntarily.static <T> Behavior<T>
stopped(Effect postStop)
Return this behavior from message processing to signal that this actor shall terminate voluntarily.static <T> Behaviors.Supervise<T>
supervise(Behavior<T> wrapped)
Wrap the given behavior such that it is restarted (i.e.static <T> Behavior<T>
unhandled()
Return this behavior from message processing in order to advise the system to reuse the previous behavior, including the hint that the message has not been handled.static <T,U>
Behavior<U>widened(Behavior<T> behavior, java.util.function.Function<PFBuilder<U,T>,PFBuilder<U,T>> selector)
static <T> Behavior<T>
withMdc(Function<T,java.util.Map<java.lang.String,java.lang.Object>> mdcForMessage, Behavior<T> behavior)
Per message MDC (Mapped Diagnostic Context) logging.static <T> Behavior<T>
withMdc(java.util.Map<java.lang.String,java.lang.Object> staticMdc, Behavior<T> behavior)
Static MDC (Mapped Diagnostic Context)static <T> Behavior<T>
withMdc(java.util.Map<java.lang.String,java.lang.Object> staticMdc, Function<T,java.util.Map<java.lang.String,java.lang.Object>> mdcForMessage, Behavior<T> behavior)
Combination of static and per message MDC (Mapped Diagnostic Context).static <T> Behavior<T>
withTimers(Function<TimerScheduler<T>,Behavior<T>> factory)
Support for scheduledself
messages in an actor.
-
-
-
Method Detail
-
setup
public static <T> Behavior<T> setup(Function<ActorContext<T>,Behavior<T>> factory)
setup
is a factory for a behavior. Creation of the behavior instance is deferred until the actor is started, as opposed toreceive(akka.japi.function.Function2<akka.actor.typed.javadsl.ActorContext<T>, T, akka.actor.typed.Behavior<T>>)
that creates the behavior instance immediately before the actor is running. Thefactory
function pass theActorContext
as parameter and that can for example be used for spawning child actors.setup
is typically used as the outer most behavior when spawning an actor, but it can also be returned as the next behavior when processing a message or signal. In that case it will be started immediately after it is returned, i.e. next message will be processed by the started behavior.- Parameters:
factory
- (undocumented)- Returns:
- (undocumented)
-
same
public static <T> Behavior<T> same()
Return this behavior from message processing in order to advise the system to reuse the previous behavior. This is provided in order to avoid the allocation overhead of recreating the current behavior where that is not necessary.- Returns:
- (undocumented)
-
unhandled
public static <T> Behavior<T> unhandled()
Return this behavior from message processing in order to advise the system to reuse the previous behavior, including the hint that the message has not been handled. This hint may be used by composite behaviors that delegate (partial) handling to other behaviors.- Returns:
- (undocumented)
-
stopped
public static <T> Behavior<T> stopped()
Return this behavior from message processing to signal that this actor shall terminate voluntarily. If this actor has created child actors then these will be stopped as part of the shutdown procedure.The
PostStop
signal that results from stopping this actor will be passed to the current behavior. All other messages and signals will effectively be ignored.- Returns:
- (undocumented)
-
stopped
public static <T> Behavior<T> stopped(Effect postStop)
Return this behavior from message processing to signal that this actor shall terminate voluntarily. If this actor has created child actors then these will be stopped as part of the shutdown procedure.The
PostStop
signal that results from stopping this actor will first be passed to the current behavior and then the providedpostStop
callback will be invoked. All other messages and signals will effectively be ignored.- Parameters:
postStop
- (undocumented)- Returns:
- (undocumented)
-
empty
public static <T> Behavior<T> empty()
A behavior that treats every incoming message as unhandled.- Returns:
- (undocumented)
-
ignore
public static <T> Behavior<T> ignore()
A behavior that ignores every incoming message and returns “same”.- Returns:
- (undocumented)
-
receive
public static <T> Behavior<T> receive(Function2<ActorContext<T>,T,Behavior<T>> onMessage)
Construct an actor behavior that can react to incoming messages but not to lifecycle signals. After spawning this actor from another actor (or as the guardian of anActorSystem
) it will be executed within anActorContext
that allows access to the system, spawning and watching other actors, etc.Compared to using
AbstractBehavior
this factory is a more functional style of defining theBehavior
. Processing the next message results in a new behavior that can potentially be different from this one. State is maintained by returning a new behavior that holds the new immutable state.- Parameters:
onMessage
- (undocumented)- Returns:
- (undocumented)
-
receiveMessage
public static <T> Behavior<T> receiveMessage(Function<T,Behavior<T>> onMessage)
Simplified version of<T>receive(akka.japi.function.Function2<akka.actor.typed.javadsl.ActorContext<T>,T,akka.actor.typed.Behavior<T>>)
with only a single argument - the message to be handled. Useful for when the context is already accessible by other means, like being wrapped in an<T>setup(akka.japi.function.Function<akka.actor.typed.javadsl.ActorContext<T>,akka.actor.typed.Behavior<T>>)
or similar.Construct an actor behavior that can react to incoming messages but not to lifecycle signals. After spawning this actor from another actor (or as the guardian of an
ActorSystem
) it will be executed within anActorContext
that allows access to the system, spawning and watching other actors, etc.Compared to using
AbstractBehavior
this factory is a more functional style of defining theBehavior
. Processing the next message results in a new behavior that can potentially be different from this one. State is maintained by returning a new behavior that holds the new immutable state.- Parameters:
onMessage
- (undocumented)- Returns:
- (undocumented)
-
receive
public static <T> Behavior<T> receive(Function2<ActorContext<T>,T,Behavior<T>> onMessage, Function2<ActorContext<T>,Signal,Behavior<T>> onSignal)
Construct an actor behavior that can react to both incoming messages and lifecycle signals. After spawning this actor from another actor (or as the guardian of anActorSystem
) it will be executed within anActorContext
that allows access to the system, spawning and watching other actors, etc.Compared to using
AbstractBehavior
this factory is a more functional style of defining theBehavior
. Processing the next message results in a new behavior that can potentially be different from this one. State is maintained by returning a new behavior that holds the new immutable state.- Parameters:
onMessage
- (undocumented)onSignal
- (undocumented)- Returns:
- (undocumented)
-
receive
public static <T> BehaviorBuilder<T> receive(java.lang.Class<T> type)
Constructs an actor behavior builder that can build a behavior that can react to both incoming messages and lifecycle signals.Compared to using
AbstractBehavior
this factory is a more functional style of defining theBehavior
. Processing the next message results in a new behavior that can potentially be different from this one. State is maintained by returning a new behavior that holds the new immutable state.- Parameters:
type
- the supertype of all messages accepted by this behavior- Returns:
- the behavior builder
-
receiveSignal
public static <T> Behavior<T> receiveSignal(Function2<ActorContext<T>,Signal,Behavior<T>> handler)
Construct an actor behavior that can react to lifecycle signals only.- Parameters:
handler
- (undocumented)- Returns:
- (undocumented)
-
intercept
public static <O,I> Behavior<O> intercept(BehaviorInterceptor<O,I> behaviorInterceptor, Behavior<I> behavior)
Intercept messages and signals for abehavior
by first passing them to aBehaviorInterceptor
When a behavior returns a new behavior as a result of processing a signal or message and that behavior already contains the same interceptor (defined by the
BehaviorInterceptor.isSame(akka.actor.typed.BehaviorInterceptor<java.lang.Object, java.lang.Object>)
method) only the innermost interceptor is kept. This is to protect against stack overflow when recursively defining behaviors.If the interceptor does keep mutable state care must be taken to create the instance in a
setup
block so that a new instance is created per spawned actor rather than shared among actor instance.- Parameters:
behaviorInterceptor
- (undocumented)behavior
- (undocumented)- Returns:
- (undocumented)
-
monitor
public static <T> Behavior<T> monitor(ActorRef<T> monitor, Behavior<T> behavior)
Behavior decorator that copies all received message to the designated monitorActorRef
before invoking the wrapped behavior. The wrapped behavior can evolve (i.e. return different behavior) without needing to be wrapped in amonitor
call again.- Parameters:
monitor
- (undocumented)behavior
- (undocumented)- Returns:
- (undocumented)
-
logMessages
public static <T> Behavior<T> logMessages(Behavior<T> behavior)
Behavior decorator that logs all messages to theBehavior
using the providedLogOptions
default configuration before invoking the wrapped behavior. To include an MDC context then first wraplogMessages
withwithMDC
.- Parameters:
behavior
- (undocumented)- Returns:
- (undocumented)
-
logMessages
public static <T> Behavior<T> logMessages(LogOptions logOptions, Behavior<T> behavior)
Behavior decorator that logs all messages to theBehavior
using the providedLogOptions
configuration before invoking the wrapped behavior. To include an MDC context then first wraplogMessages
withwithMDC
.- Parameters:
logOptions
- (undocumented)behavior
- (undocumented)- Returns:
- (undocumented)
-
supervise
public static <T> Behaviors.Supervise<T> supervise(Behavior<T> wrapped)
Wrap the given behavior such that it is restarted (i.e. reset to its initial state) whenever it throws an exception of the given class or a subclass thereof. Exceptions that are not subtypes ofThr
will not be caught and thus lead to the termination of the actor.It is possible to specify different supervisor strategies, such as restart, resume, backoff.
The
SupervisorStrategy
is only invoked for "non fatal" (seeNonFatal
) exceptions.Example:
final Behavior[DbCommand] dbConnector = ... final Behavior[DbCommand] dbRestarts = Behaviors.supervise(dbConnector) .onFailure(SupervisorStrategy.restart) // handle all NonFatal exceptions final Behavior[DbCommand] dbSpecificResumes = Behaviors.supervise(dbConnector) .onFailure[IndexOutOfBoundsException](SupervisorStrategy.resume) // resume for IndexOutOfBoundsException exceptions
- Parameters:
wrapped
- (undocumented)- Returns:
- (undocumented)
-
widened
public static <T,U> Behavior<U> widened(Behavior<T> behavior, java.util.function.Function<PFBuilder<U,T>,PFBuilder<U,T>> selector)
-
withTimers
public static <T> Behavior<T> withTimers(Function<TimerScheduler<T>,Behavior<T>> factory)
Support for scheduledself
messages in an actor. It takes care of the lifecycle of the timers such as cancelling them when the actor is restarted or stopped.- Parameters:
factory
- (undocumented)- Returns:
- (undocumented)
- See Also:
TimerScheduler
-
withMdc
public static <T> Behavior<T> withMdc(Function<T,java.util.Map<java.lang.String,java.lang.Object>> mdcForMessage, Behavior<T> behavior)
Per message MDC (Mapped Diagnostic Context) logging.- Parameters:
mdcForMessage
- Is invoked before each message is handled, allowing to setup MDC, MDC is cleared after each message processing by the inner behavior is done.behavior
- The actual behavior handling the messages, the MDC is used for the log entries logged throughActorContext.log
See also
akka.actor.typed.Logger.withMdc
- Returns:
- (undocumented)
-
withMdc
public static <T> Behavior<T> withMdc(java.util.Map<java.lang.String,java.lang.Object> staticMdc, Behavior<T> behavior)
Static MDC (Mapped Diagnostic Context)- Parameters:
staticMdc
- This MDC is setup in the logging context for every messagebehavior
- The actual behavior handling the messages, the MDC is used for the log entries logged throughActorContext.log
See also
akka.actor.typed.Logger.withMdc
- Returns:
- (undocumented)
-
withMdc
public static <T> Behavior<T> withMdc(java.util.Map<java.lang.String,java.lang.Object> staticMdc, Function<T,java.util.Map<java.lang.String,java.lang.Object>> mdcForMessage, Behavior<T> behavior)
Combination of static and per message MDC (Mapped Diagnostic Context).Each message will get the static MDC plus the MDC returned for the message. If the same key are in both the static and the per message MDC the per message one overwrites the static one in the resulting log entries.
* The
staticMdc
ormdcForMessage
may be empty.- Parameters:
staticMdc
- A static MDC applied for each messagemdcForMessage
- Is invoked before each message is handled, allowing to setup MDC, MDC is cleared after each message processing by the inner behavior is done.behavior
- The actual behavior handling the messages, the MDC is used for the log entries logged throughActorContext.log
See also
akka.actor.typed.Logger.withMdc
- Returns:
- (undocumented)
-
-