【发布时间】:2017-10-06 07:50:58
【问题描述】:
我正在学习 Akka remoting,参考书Learning Akka。
使用受限网络,我无法使用 sbt(无法很好地配置代理)。
首先,我使用 application.conf 为 Akka 服务器创建一个项目
akka {
actor {
provider = remote
}
remote {
emabled-transports = ["akka.remote.netty.tcp"]
netty.tcp {
hostname = "127.0.0.1"
port = 2552
}
}
}
控制台显示
Remoting now listens on addresses: [akka.tcp://akkademy@127.0.0.1:2552]
第二个项目是具有JClient 类的客户端:
public class JClient {
private static final int TIMEOUT = 2000;
private final ActorSystem system = ActorSystem.create("LocalSystem");
private final ActorSelection remoteDb;
public JClient(String remoteAddress) {
remoteDb = system.actorSelection("akka.tcp://LocalSystem@" + remoteAddress + "/user/akkademy-db");
}
public CompletionStage set(String key, Object value) {
return toJava(ask(remoteDb, new SetRequest(key, value), TIMEOUT));
}
public CompletionStage<Object> get(String key) {
return toJava(ask(remoteDb, new GetRequest(key), TIMEOUT));
}
}
我将值“127.0.0.1:2552”传递给remoteAddress,调用set/get方法,遇到错误:
java.util.concurrent.ExecutionException: akka.pattern.AskTimeoutException: Ask timed out on [ActorSelection[Anchor(akka://akkademy/deadLetters), Path(/user/.*)]] after [2000 ms]. Sender[null] sent message of type "javah.GetRequest".
【问题讨论】:
-
我不知道为什么我的 remoteURI 被转换为 akka://akkademy/deadletters