Как мне исправить ошибки "Futures timed out [5 seconds] и [akkaDeadLetter]"?
Я сейчас пытаюсь реализовать класс numbersPrinter (код:
package org.example.actors;
import akka.actor.AbstractActor;
import akka.actor.Props;
import akka.event.Logging;
import akka.event.LoggingAdapter;
import akka.japi.Procedure;
import java.util.ArrayList;
public class numbersPrinter extends AbstractActor {
// поля
LoggingAdapter log = Logging.getLogger(getContext().system(), this);
// метод для определения
public void returnNumber(Object message){
if (message.equals(String.valueOf(1))){
getSender().tell(1, getSelf());
} else if (message instanceof String) {
log.info((String) message);
} else {
unhandled(message);
log.info("Unhandled message");
}
}
@Override
public Receive createReceive() {
return receiveBuilder()
.create()
.match(numbersPrinter.class, this::returnNumber)
.build();
}
}
фрагмент кода класса Main:
package org.example;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.pattern.Patterns;
import akka.util.Timeout;
import org.example.actors.numbersPrinter;
import scala.concurrent.Await;
import scala.concurrent.duration.Duration;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
// создаем систему акторов
// делаем новую систему
final ActorSystem system = ActorSystem.create(
"ActorsSystem");
// делаем актор для печати номеров
ActorRef numbersPrinter = system.actorOf(Props.create(numbersPrinter.class, numbersPrinter::new), "numbersPrinter");
// тест для печати номера 1
System.out.println("numbersPrinter actor test");
// определяем время, в течение которого мы будем ждать ответа
final Timeout timeout = new Timeout(Duration.create(5, TimeUnit.SECONDS));
// здесь сделаем ask
scala.concurrent.Future<Object> rt = Patterns.ask(numbersPrinter, String.valueOf(1), timeout); // кому и какое сообщение передадим?
// объявляем результат
try {
String result = (String) Await.result(rt, timeout.duration());
System.out.println(result);
} catch (Exception e) {
throw new RuntimeException(e);
}
Возникают ошибки:
[INFO] [akkaDeadLetter][12/22/2022 20:10:42.028] [ActorsSystem-akka.actor.default-dispatcher-6] [akka://ActorsSystem/user/numbersPrinter] Message [java.lang.String] from Actor[akka://ActorsSystem/temp/numbersPrinter$a] to Actor[akka://ActorsSystem/user/numbersPrinter#-1051654874] was unhandled. [1] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'.
Exception in thread "main" java.lang.RuntimeException:
java.util.concurrent.TimeoutException: Future timed out after [5 seconds]
at org.example.Main.main(Main.java:63)
Caused by: java.util.concurrent.TimeoutException: Future timed out after [5 seconds]
at scala.concurrent.impl.Promise$DefaultPromise.tryAwait0(Promise.scala:248)
at scala.concurrent.impl.Promise$DefaultPromise.result(Promise.scala:261)
at scala.concurrent.Await$.$anonfun$result$1(package.scala:201)
at scala.concurrent.BlockContext$DefaultBlockContext$.blockOn(BlockContext.scala:62)
at scala.concurrent.Await$.result(package.scala:124)
at scala.concurrent.Await.result(package.scala)
at org.example.Main.main(Main.java:60)
Подскажите, пожалуйста, в чем причина и как исправить?