package com.example; import akka.actor.typed.javadsl.TimerScheduler; import akka.actor.typed.Behavior; import akka.actor.typed.javadsl.AbstractBehavior; import akka.actor.typed.javadsl.ActorContext; import akka.actor.typed.javadsl.Behaviors; import akka.actor.typed.javadsl.Receive; import java.time.Duration; public class ExampleTimerActor extends AbstractBehavior { public interface Message {}; public record ExampleMessage(String someString) implements Message { } public static Behavior create() { return Behaviors.setup(context -> Behaviors.withTimers(timers -> new ExampleTimerActor(context, timers))); } private final TimerScheduler timers; private ExampleTimerActor(ActorContext context, TimerScheduler timers) { super(context); this.timers = timers; Message msg = new ExampleMessage("test123"); this.timers.startSingleTimer(msg, msg, Duration.ofSeconds(10)); } @Override public Receive createReceive() { return newReceiveBuilder() .onMessage(ExampleMessage.class, this::onExampleMessage) .build(); } private Behavior onExampleMessage(ExampleMessage msg) { getContext().getLog().info("I have send myself this message after 10 Seconds: {}", msg.someString); return this; } }