gpt4 book ai didi

java - akka-spring : How to wire actors

转载 作者:行者123 更新时间:2023-12-01 18:25:27 25 4
gpt4 key购买 nike

我正在关注akka-java-spring但仍然不知道如何将 Actor 注入(inject)另一个 Actor 中。例如:

public class Reader extends UntypedConsumerActor {

private ActorRef handler;

public Reader(ActorRef handler) {
this.handler = handler;
}
// ...
}

// Create the handler first
final ActorRef handler = getContext()
.actorOf(SpringExtProvider.get(system).props("Handler"), "handler");

// Now how do I pass the handler above to the Reader ???
final ActorRef reader = ???

最佳答案

如果您想使用 Spring 来执行此操作,那么 ActorRef 必须是一个 spring bean。这是可能的,但在我看来不是很优雅,因为没有一种简单的方法来维护监督层次结构以及将 ActorRef 公开为单例 bean。我一开始就尝试过这个,但最终创建了很多顶级 Actor ,这是不可取的。我发现将 Spring 注入(inject)和 ActorRef 注入(inject)结合到其他 actor 中的最合适方法是通过消息传递,如 Akka docs 中所述。 。

我的 Spring 服务 bean 是通过 Spring 注入(inject)的,而我的 ActorRef 是通过需要时的消息传递注入(inject)的。由于 ActorRef 对于它实际代表的内容相当模糊,因此您可以将 ActoRef 包装在一个还提供类型的类中,以便接收 Actor 可以决定如何处理它,如果他们要注入(inject)许多不同的 ActorRef,则非常重要。

无论如何,回答你的问题,要创建一个 Spring 管理的 ActorRef bean,你可以在 Spring @Configuration 类中执行如下操作:

@Autowired
private ActorSystem actorSystem;

@Bean(name = "handler")
public ActorRef handler() {
return actorSystem.actorOf(SpringExtProvider.get(system).props("Handler"), "handler");
}

然后在你的 Spring 注释的 actor 中你会有类似的东西:

   @Named("Reader") 
@Scope("prototype")
public class Reader extends UntypedConsumerActor {

@Autowired
@Qualifier("handler")
private ActorRef handler;

// ...
}

当您使用 Spring 扩展创建 Reader actor 时,将会发生“处理程序”ActorRef 的依赖注入(inject)。重要的是要记住 ActorRef 是 Actor 的代理。

关于java - akka-spring : How to wire actors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26367922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com