gpt4 book ai didi

java - Junit 测试 Akka 单例 Actor : preStart() hook not called

转载 作者:行者123 更新时间:2023-11-30 03:57:34 26 4
gpt4 key购买 nike

我想在 Eclipse SDK 的 Scala IDE 构建中使用 java 测试单例 Actor(构建 ID:3.0.2-vfinal-20131028-1923-Typesafe),Akka 是 2.3.1。

public class WorkerTest {

static ActorSystem system;

@BeforeClass
public static void setup() {
system = ActorSystem.create("ClusterSystem");
}

@AfterClass
public static void teardown() {
JavaTestKit.shutdownActorSystem(system);
system = null;
}

@Test
public void testWorkers() throws Exception {
new JavaTestKit(system) {{

system.actorOf(ClusterSingletonManager.defaultProps(
Props.create(ClassSingleton.class), "class",
PoisonPill.getInstance(),"backend"), "classsingleton");

ActorRef selection = system.actorOf(ClusterSingletonProxy.defaultProps("user/classsingleton/class", "backend"), "proxy");
System.out.println(selection);
}};
}
}

ClassSingleton.java:

public class ClassSingleton extends UntypedActor {

LoggingAdapter log = Logging.getLogger(getContext().system(), this);

public ClassSingleton() {
System.out.println("Constructor is done");
}

public static Props props() {
return Props.create(ClassOperator.class);
}

@Override
public void preStart() throws Exception {
ActorRef selection = getSelf();
System.out.println("ClassSingleton ActorRef... " + selection);
}

@Override
public void onReceive(Object message) {
}

@Override
public void postStop() throws Exception {
System.out.println("postStop ... ");
}


}

ClassSingleton actor什么也没做,打印输出是:仅限 Actor[akka://ClusterSystem/user/proxy#-893814405],它是从 ClusterSingletonProxy 打印的。也不异常(exception),Junit 已完成,绿旗。在调试时不会调用ClassSingleton(包括构造函数和preStart())。确实是我,但是有什么错吗?更令人困惑的是,相同的 ClassSingleton ClusterSingletonManager 代码在 javatestkit 和 junit 之外运行良好。

我怀疑集群设置可能是负责任的,因此我尝试包含和排除以下代码(没有效果)。但是我想了解为什么我们需要它,如果我们需要它(它来自示例代码)。非常感谢您的帮助。

Address clusterAddress = Cluster.get(system).selfAddress();
Cluster.get(system).join(clusterAddress);

最佳答案

代理模式标准行为是找到最旧的节点并在那里部署“真实”参与者,并且代理参与者在所有节点上启动。我怀疑集群配置未完成,因此您的参与者从未启动。

join 方法使节点成为集群的成员。因此,如果没有人加入集群,则无法创建具有代理的参与者。

问题是你在junit测试期间读取的配置文件是否包含创建集群的所有信息?种子节点?端口设置是否与种子节点相同?

关于java - Junit 测试 Akka 单例 Actor : preStart() hook not called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22782671/

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