首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >远程akka系统端口冲突

远程akka系统端口冲突
EN

Stack Overflow用户
提问于 2012-10-08 19:05:53
回答 1查看 1.1K关注 0票数 0

我正在开发一个使用java .The的play Framework2系统,play框架使用集成了play框架的akka系统来连接远程akka系统。远程akka系统由主节点和工作节点组成。这两个系统都在同一台计算机上,使用eclipse juno IDE,我已经为主节点配置了两个端口2552,并为play 2框架上的worker node.the akka节点配置了端口2553,这是由系统本身选择的。play框架中的akka系统预计将通过使用akka配置的远程查找将messgae传递到远程主节点。主节点实习生还将消息传递给远程工作者,以便通过远程查找进行处理。主节点和工作节点具有以下格式的application.conf文件:

代码语言:javascript
复制
src/main/resources/application.conf

但是,在启动时,主节点和工作节点都决定使用端口号2552进行通信。我给出下面的代码片段:

这是play framewrok application.config文件的代码。

代码语言:javascript
复制
localNode {
    akka {
        actor {
            provider = "akka.remote.RemoteActorRefProvider"
        }
        remote {
            transport = "akka.remote.netty.NettyRemoteTransport"
            netty {
                hostname = "127.0.0.1"
                port = 0
            }
        }
    }
}

这是play localNode的配置

代码语言:javascript
复制
package controllers;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Map;

import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

import play.libs.F.Callback;
import play.mvc.WebSocket;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.serialization.Serialization;
import akka.serialization.SerializationExtension;

import com.typesafe.config.ConfigFactory;
import  Com.RubineEngine.GesturePoints.*;

public class LocalNode  {

    ActorSystem csystem;
    ActorRef localActor ;


    public LocalNode() { 

       //We create the actor container and a child upon initialization 
     csystem = ActorSystem.create("LocalNode", ConfigFactory.load().getConfig("localNode"));
     localActor = csystem.actorOf(new Props(LocalActor.class),"localActor");
    }


     public void connectMaster (final String classname)
     {  
         localActor.tell(classname);

     }

     public  void connectMaster ()
     {  

     }


     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);            
             }
          });     } 
}           

这是play框架中akka角色的代码

代码语言:javascript
复制
package controllers;


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(" Welcome home " , getSelf());   
              System.out.println(" Local Actor 3");}    
         else 
         {unhandled(arg);}
    }


    public void preStart()
    {
      masterActor = getContext().actorFor("akka://MasterNode@127.0.0.1:2553/user/masterActor");
    }
}

这是主节点application.conf的代码

代码语言:javascript
复制
masterNode {

akka {
  actor {
    provider = "akka.remote.RemoteActorRefProvider"
  }
  remote {
    transport = "akka.remote.netty.NettyRemoteTransport"
    netty {
      hostname = "127.0.0.1"
      remote.netty.port = 2553
    }
 }
}
}

这是主节点的代码

代码语言:javascript
复制
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();
          }
}  

这是主演akka的代码

代码语言:javascript
复制
package Rubine_Cluster;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Map;

import Com.RubineEngine.GesturePoints.*;
import akka.actor.*;
import akka.serialization.Serialization;
import akka.serialization.SerializationExtension;
import akka.serialization.Serializer;





public class MasterActor extends UntypedActor {

    /**
     * 
     */

    ActorRef worker1;



    @Override
    public void onReceive(Object message) throws Exception {
        System.out.println(" Master Actor 5");
        System.out.println(message);

         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:2552/user/workerActor");
    }

}

这是工作节点application.conf的代码

代码语言:javascript
复制
workerNode {

akka {
  actor {
    provider = "akka.remote.RemoteActorRefProvider"
  }
  remote {
    transport = "akka.remote.netty.NettyRemoteTransport"
    netty {
      hostname = "127.0.0.1"
      remote.netty.port = 2552
    }
 }
}
}

这是worker nide的代码。

代码语言:javascript
复制
package com.theta.gesture;

import com.typesafe.config.ConfigFactory;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.kernel.Bootable;


public class WorkerNode implements Bootable{
   ActorSystem system;
   ActorRef worker;

   WorkerNode(){
       system = ActorSystem.create("WorkerNode", ConfigFactory.load()
                .getConfig("workerNode"));
            ActorRef workerActor = system.actorOf(new Props(WorkerActor.class),"workerActor");              
}


    public void shutdown() {
        system.shutdown();

    }

    public void startup() {
    }       
}

这是worker项目中执行元的代码

代码语言:javascript
复制
package com.theta.gesture;

import java.util.ArrayList;
import java.util.Map;

import Com.RubineEngine.GesturePoints.GesturePoints;
import akka.actor.*;

public class WorkerActor extends UntypedActor {

     private static double              DIST_SQ_THRESHOLD   = 3 * 3; /* threshold to eliminate mouse jitter */

    @Override
    public void onReceive(Object msg) throws Exception {

         if(msg instanceof GesturePoints) 
         { GesturePoints message = (GesturePoints) msg;
          initial_Theta(message);}  

         else {unhandled(msg);}
    }

    public void initial_Theta(GesturePoints p)
    {       System.out.println(" Worker Actor 1");          
        if(p.getPoints().get("X").size() < 3)  //The number of x coordinates as size
        {   return;}                     

        System.out.println(" Worker Actor 2");
             double magsq,dx,dy, recip;

             dx = (double) ((Integer)p.getPoints().get("x").get(2)  - (Integer)p.getPoints().get("x").get(0)) ;
             dy = ((Double)p.getPoints().get("y").get(2)) - ((Double)p.getPoints().get("y").get(0));

             magsq = dx * dx + dy * dy;  
             if(magsq  > DIST_SQ_THRESHOLD)
             {
                 recip = 1/Math.sqrt(magsq);
                double  initial_cos = dx * recip;

                System.out.println(" Worker Actor 3");
                double  initial_sin = dy * recip;

                 System.out.println("Feature cos  " + initial_cos);
                 System.out.println("Gesture sin  " + initial_sin);
             } 
         }  }

这是工作节点上的控制台信息

代码语言:javascript
复制
[INFO] [10/08/2012 12:12:44.486] [main] [ActorSystem(WorkerNode)] REMOTE: 
RemoteServerStarted@akka://WorkerNode@127.0.0.1:2552

这是主nODE上的控制台信息

代码语言:javascript
复制
[INFO] [10/08/2012 12:13:34.633] [main] [ActorSystem(MasterNode)] REMOTE:  
RemoteServerStarted@akka://MasterNode@127.0.0.1:2552

任何关于这种情况的可能过程和建议的解决方案的想法都是迫切需要的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-08 21:50:12

嵌套部分中的"remote.netty.port = X“应该是"port = X”

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12780443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档