Java 向发件人发送回信,并将其打印出来
我对阿克卡很陌生。我用它创建了一个简单的Hello World应用程序。 该应用程序非常简单,它会向我的简单演员发送一条消息。我想要的是将消息发送回消息的第一个发件人。我无法收到回信。有人怎么能这样做?客户端是否必须实现onReceive方法?我试图在代码中添加注释Java 向发件人发送回信,并将其打印出来,java,akka,Java,Akka,我对阿克卡很陌生。我用它创建了一个简单的Hello World应用程序。 该应用程序非常简单,它会向我的简单演员发送一条消息。我想要的是将消息发送回消息的第一个发件人。我无法收到回信。有人怎么能这样做?客户端是否必须实现onReceive方法?我试图在代码中添加注释 import akka.actor.UntypedActor; public class HelloActor extends UntypedActor { @Override public
import akka.actor.UntypedActor;
public class HelloActor extends UntypedActor {
@Override
public void onReceive(Object o) throws Exception {
if(o instanceof String){
String message = (String)o;
System.out.println(message);
// how to get this response ?
getSender().tell("World",getSelf());
}
}
}
客户
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
public class Client{
public static void main(String[] args){
ActorSystem actorSystem = ActorSystem.create("HelloWorldSystem");
ActorRef listener = actorSystem.actorOf(new Props(HelloActor.class), "listener");
// sending is OK but how to get the response?
listener.tell("Hello");
}
}
正确的答案是使用未来:
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.dispatch.*;
import akka.dispatch.Future;
import akka.pattern.Patterns;
import akka.util.Duration;
import akka.util.Timeout;
public class Client{
public static void main(String[] args){
ActorSystem actorSystem = ActorSystem.create("HelloWorldSystem");
ActorRef listener = actorSystem.actorOf(new Props(HelloActor.class), "listener");
Timeout timeout = new Timeout(Duration.create(5, "seconds"));
Future<Object> future = Patterns.ask(listener, "Hello", timeout);
try{
String result = (String) Await.result(future, timeout.duration());
System.out.println(result);
}catch (Exception e){
e.printStackTrace();
}
}
}
导入akka.actor.ActorRef;
导入akka.actor.actor系统;
导入akka.actor.Props;
进口akka。发货。*;
进口akka.dispatch.Future;
导入akka.pattern.Patterns;
导入akka.util.Duration;
导入akka.util.Timeout;
公共类客户端{
公共静态void main(字符串[]args){
ActorSystem ActorSystem=ActorSystem.create(“HelloWorldSystem”);
ActorRef listener=actorSystem.actorOf(新道具(HelloActor.class),“listener”);
超时=新超时(持续时间.create(5,“秒”);
Future=Patterns.ask(侦听器,“Hello”,超时);
试一试{
字符串结果=(字符串)wait.result(future,timeout.duration());
系统输出打印项次(结果);
}捕获(例外e){
e、 printStackTrace();
}
}
}
您应该使用“询问”来获得未来
,而不是在您的主要方法中使用“告知”。非常感谢。我只是用了一个未来,它成功了。我还不能用正确的实现来回答我的问题,但我会的。所以,在一个actor中运行的所有东西都主要在它自己的线程中?但不是一直如此?如果希望在参与者之间共享同一对象,会发生什么情况?actor by Essential确保其代码一次仅由一个线程处理。如果需要并行化,则需要一个由“路由器”管理的参与者池,以便在同一时间将同一对象分派给多个参与者。谢谢,我在翻阅关于阿克卡的书,大部分都太大了。我会大胆地买这个。再次感谢迈克!