Java 引用远程参与者的问题
我有一个play框架,它使用play-actor集成来引用远程akka系统并与之通信。看起来我没有正确地进行远程引用。首先,远程akka实现可引导接口,它有一个主节点,用于创建子参与者系统。Java 引用远程参与者的问题,java,playframework-2.0,maven-3,akka,eclipse-juno,Java,Playframework 2.0,Maven 3,Akka,Eclipse Juno,我有一个play框架,它使用play-actor集成来引用远程akka系统并与之通信。看起来我没有正确地进行远程引用。首先,远程akka实现可引导接口,它有一个主节点,用于创建子参与者系统。 play-actor系统然后引用远程系统。下面给出了代码片段 这是创建本地参与者系统的Play框架节点 public void connectMaster (final String classname) { localActor.tell(classname); } public
play-actor系统然后引用远程系统。下面给出了代码片段 这是创建本地参与者系统的Play框架节点
public void connectMaster (final String classname)
{
localActor.tell(classname);
}
public void connectMaster ()
{
//localActor.tell(getByte(new Coordinates()));
}
public void connectMaster (final WebSocket.In<JsonNode> in, final WebSocket.Out<JsonNode> out )
{
in.onMessage(new Callback<JsonNode>() {
public void invoke(JsonNode event) throws JsonParseException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
@SuppressWarnings("unchecked")
Map<String,ArrayList<Object>> jsonMap = mapper.readValue(event, Map.class);
GesturePoints gp = new GesturePoints();
gp.setPoints(jsonMap);
localActor.tell(gp);
}
}); }
这是创建主参与者的远程akka系统主节点
package Rubine_Cluster;
import java.util.Arrays;
import com.typesafe.config.ConfigFactory;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.kernel.Bootable;
/**
* Hello world!
*
*/
public class MasterNode implements Bootable
{
final ActorSystem system;
ActorRef masterActor;
public MasterNode() {
//Create a child actor of this actor upon initialization
system = ActorSystem.create("MasterNode", ConfigFactory.load()
.getConfig("masterNode"));
masterActor = system.actorOf(new Props(MasterActor.class),"masterActor");
}
public void startup() {
}
public void shutdown() {
system.shutdown();
}
}
这是由MasterNode创建的远程参与者系统
public class MasterActor extends UntypedActor {
/**
*
*/
ActorSystem system = ActorSystem.create("container");
ActorRef worker1;
//public MasterActor(){}
@Override
public void onReceive(Object message) throws Exception {
System.out.println(" Master Actor 5");
if(message instanceof GesturePoints)
{ //GesturePoints gp = (GesturePoints) message;
System.out.println(" Master Actor 1");
try { worker1.tell(message, getSelf());
System.out.println(" Master Actor 2");
} catch (Exception e) {
getSender().tell(new akka.actor.Status.Failure(e), getSelf());
throw e;
}
}
else{ unhandled(message);}
}
public void preStart()
{
worker1 = getContext().actorFor("akka://WorkerNode@127.0.0.1:2553/user/workerActor");
}
}
我想我的引用是错误的,或者可能是发送了一条消息,任何建议都是受欢迎的我知道这不是Eclipse中的“bug”。但是你知道问题可能是什么吗?一种可能性是:standard out被重新定向了。我不熟悉阿克卡,因此无法对此发表评论。顺便说一句,我认为,您要做的事情最好是使用日志记录。如果您在命令行上运行程序,您会看到输出吗?(这将检查这是否是一个与Eclipse相关的问题)老实说,这里没有太多东西。首先,您没有向主参与者发送任何消息,因此根本不会调用onReceive。此外,创建辅助进程的代码不存在。你是说这段代码在Eclipse之外也能工作吗?
public class MasterActor extends UntypedActor {
/**
*
*/
ActorSystem system = ActorSystem.create("container");
ActorRef worker1;
//public MasterActor(){}
@Override
public void onReceive(Object message) throws Exception {
System.out.println(" Master Actor 5");
if(message instanceof GesturePoints)
{ //GesturePoints gp = (GesturePoints) message;
System.out.println(" Master Actor 1");
try { worker1.tell(message, getSelf());
System.out.println(" Master Actor 2");
} catch (Exception e) {
getSender().tell(new akka.actor.Status.Failure(e), getSelf());
throw e;
}
}
else{ unhandled(message);}
}
public void preStart()
{
worker1 = getContext().actorFor("akka://WorkerNode@127.0.0.1:2553/user/workerActor");
}
}