0

リモートの 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");
    }

}

参照が間違っているか、おそらくメッセージを送信する必要があったと思います。

4

0 に答える 0