首页 > 解决方案 > 如何使用 Akka Java 从非演员类中的接待员访问演员?

问题描述

我有不同的演员作为 Akka 系统的一部分运行,具有不同的类型。如何使用接待员从具有 System 对象的非演员类中找到演员。我没有直接引用或任何方式将引用传递给非参与者类。

标签: javaakka

解决方案


谢天谢地,我可以使用 Java AKKA 和 Receptionist 提出通用且优雅的解决方案!

private <T> CompletableFuture<ActorRef<T>> findActor(ActorSystem<Void> system, ServiceKey<T> actorKey) {
    ActorRef<Command> receptionist = system.receptionist();
    Duration askTimeout = Duration.ofSeconds(3);
    CompletionStage<Listing> result = AskPattern.ask(
            receptionist,
            replyTo -> Receptionist.find(actorKey, replyTo),
            askTimeout,
            system.scheduler());

    return result.toCompletableFuture().thenApplyAsync(
            (reply) -> {
                if (reply != null && reply instanceof Listing) {
                    return reply.getServiceInstances(actorKey).stream().findFirst().get();
                }
                return null;
            }).exceptionally((Throwable ex) -> {
                return null;
            });
}

推荐阅读