リモートの akka システムを参照して通信するために、play アクターの統合を使用するプレイ フレームワークがあります。リモート参照を正しく取得していないようです。最初に、リモート akka は起動可能なインターフェイスを実装し、子アクター システムを作成するマスター ノードを備えています。
次に、プレイ アクター システムがリモート システムを参照します。コード スニペットを以下に示します。
これは、ローカル アクター システムを作成する 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);
}
}); }
これはローカル Actor システム イン プレイ フレームワークです。
パッケージコントローラー;
import Com.RubineEngine.GesturePoints.*;
import akka.actor.ActorRef;
import akka.actor.UntypedActor;
import akka.event.Logging;
import akka.event.LoggingAdapter;
public class LocalActor extends UntypedActor {
/**
*
*/
ActorRef masterActor; // = getContext().actorFor("akka://MasterNode@127.0.0.1:2552/user/masterActor");
LoggingAdapter log = Logging.getLogger(getContext().system(), this);
@Override
public void onReceive(Object arg) throws Exception {
System.out.println(" Local Actor 1");
if(arg instanceof GesturePoints)
{ System.out.println(" local Actor 2");
masterActor.tell(arg , getSelf());
System.out.println(" Local Actor 3");}
else
{unhandled(arg);}
}
public void preStart()
{
masterActor = getContext().actorFor("akka://MasterNode@127.0.0.1:2552/user/masterActor");
}
}
これは、マスター アクターを作成するリモート 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");
}
}
参照が間違っているか、おそらくメッセージを送信する必要があったと思います。