Как мне исправить ошибки "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)

Подскажите, пожалуйста, в чем причина и как исправить?


Ответы (0 шт):