How can I send a message to an actor with a delay?
This topic is based on a conversation between an anonymous user of Akka and our “Ask AI about Akka” bot in the documentation.
How can I send a message to an actor with a delay?
This topic is based on a conversation between an anonymous user of Akka and our “Ask AI about Akka” bot in the documentation.
In Akka, you can send a message to an actor with a delay using the scheduler. Here’s how you can do it in both Scala and Java:
Scala:
import system.dispatcher
// Schedules to send the "foo"-message to the testActor after 50ms
system.scheduler.scheduleOnce(50 milliseconds, testActor, "foo")
Java:
system
.scheduler()
.scheduleOnce(
Duration.ofMillis(50), testActor, "foo", system.dispatcher(), ActorRef.noSender());
In the above examples, a message “foo” is scheduled to be sent to the testActor
after a delay of 50 milliseconds. The scheduleOnce
method is used to schedule the message.
You can also schedule a function to be executed after a delay. Here’s how you can do it:
Scala:
// Schedules a function to be executed (send a message to the testActor) after 50ms
system.scheduler.scheduleOnce(50 milliseconds) {
testActor ! System.currentTimeMillis
}
Java:
system
.scheduler()
.scheduleOnce(
Duration.ofMillis(50),
new Runnable() {
@Override
public void run() {
testActor.tell(System.currentTimeMillis(), ActorRef.noSender());
}
},
system.dispatcher());
In these examples, a function that sends the current time to the testActor
is scheduled to be executed after a delay of 50 milliseconds.
For more details, you can refer to the Akka Scheduler Documentation.
I would also like to add that if you are using the typed API you can use the scheduleOnce
in the ActorContext
to send a delayed message to another actor.
When scheduling messages to itself the actor can use the TimerScheduler
, retrieved from Behaviors.withTimers
.