这是否是Akka角色的正确用例?

a64a0gku  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(220)

我正在更新一个Akka集群,其中一个特定的参与者应该在集群中的一个节点上启动,这取决于配置值。
提供以下代码:

void register(Member member) {
        if (member.hasRole("frontend"))
          getContext()
              .actorSelection(member.address() + "/user/frontend")
              .tell(BACKEND_REGISTRATION, getSelf());
      }

So I could use something like : if (member.hasRole("<MY_CUSTOM_ROLE>")) {
    //Start My Actor
}

在Akka classic中,根据角色启动一个角色似乎不是角色的预期功能,因为在上面的示例中,没有创建角色。而是根据路径将一条消息传递给另一个角色。由于在Akka classic中没有spawn方法,因此在Akka classic中无法实现根据角色创建角色。
Akka输入的角色似乎实现了我试图实现的预期功能:
https://doc.akka.io/docs/akka/current/typed/cluster.html开始:

Member selfMember = Cluster.get(context.getSystem()).selfMember();

if (selfMember.hasRole("backend")) {
  context.spawn(Backend.create(), "back");
} else if (selfMember.hasRole("front")) {
  context.spawn(Frontend.create(), "front");
}

如果角色可用,则在此处创建Akka演员。
由于我使用的是经典的Actor,我正在考虑为.yml文件中的每个部署添加一个环境变量,而不是Akka“角色”,然后在启动所有Akka参与者的源代码中,如果为给定的部署填充了环境变量,则启动给定的参与者,否则不启动该参与者。这是一个确定集群中每个节点上应启动哪个参与者的可行解决方案吗?

nxagd54h

nxagd54h1#

在Akka Classic中,您会看到类似于

if (member.hasRole("<MY CUSTOM ROLE>")) {
  Props props = ...
  ActorRef ref = context.system().actorOf(props, "special-name") // spawn as a direct child of the ActorSystem
  // or ...
  ActorRef ref = context.actorOf(props, "special-name") // spawn as a child of this actor
}

在Classic中,你可以直接通过ActorSystem产卵。

相关问题