【问题标题】:Akka future with Play Framework使用 Play 框架的 Akka 未来
【发布时间】:2012-09-30 16:11:31
【问题描述】:

我正在尝试将 Akka future 与 play 框架一起使用来连接到远程 akka 系统 .运行系统后,akka future 给我一个警告,说剩下一个参数。

代码如下:

这是 [lay 控制器代码: p

ackage controllers;

import com.typesafe.config.ConfigFactory;

import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import play.*;
import play.mvc.*;

import views.html.*;

public class Application extends Controller {



  public static Result index() throws InterruptedException { 

      System.out.println(" Local Node Called0");


      ActorSystem csystem = ActorSystem.create("Application", ConfigFactory.load().getConfig("LocalNode"));
      ActorRef localNode = csystem.actorOf(new Props(LocalNode.class));

        System.out.println(" Local Node Called1");
        localNode.tell("Hello");
        System.out.println(" Local Node Called2");

        Thread.sleep(5000);
        csystem.shutdown();
        return ok(index.render("I am OK"));
  }           
}

这是播放框架本地actor节点

包控制器;

导入 akka.actor.; 导入 akka.dispatch.Await; 导入 akka.dispatch.Future; 导入 akka.event.Logging; 导入 akka.event.LoggingAdapter; 导入 akka.util.Duration; 导入 akka.util.Timeout; 导入 akka.pattern.;

公共类 LocalNode 扩展 UntypedActor {

    LoggingAdapter log = Logging.getLogger(getContext().system(), this);
    Timeout timeout = new Timeout(Duration.parse("20 seconds"));

    ActorRef masterActor;

    public void preStart()
    {
        /* Get reference to Master Node*/
         masterActor = 

    getContext().actorFor("akka://MasterNode@127.0.0.1:2552/user/masterActor");
    }

    @Override
    public void onReceive(Object message) throws Exception {
        System.out.println(" Future called  ");

         Future<Object> future = Patterns.ask(masterActor , message.toString(), timeout);

            String result = (String) Await.result(future, timeout.duration());

            log.info("Messagefrom Server", result.toString());  
    }
   }

这是远程akka系统master nide

package Rubine_Cluster;

import com.typesafe.config.ConfigFactory;

import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.actor.UntypedActor;
import akka.kernel.Bootable;

/**
 * Hello world!
 *
 */
public class MasterNode implements Bootable
{
     final ActorSystem system;

      public MasterNode() {
        system = ActorSystem.create("MasterNode", ConfigFactory.load()
            .getConfig("masterNode"));
        ActorRef masterActor = system.actorOf(new Props(MasterActor.class),"masterActor");
        System.out.println(" Master Node is called ");
      }

      public void startup() {

      }

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

这是akka远程系统MasterActor

package Rubine_Cluster;

import akka.actor.*;


public class MasterActor extends UntypedActor {

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


         if (message instanceof String) {
                // Get reference to the message sender and reply back
                getSender().tell(message + " got something");       
    }
  }  
}

这是来自播放框架的消息

[INFO] [09/30/2012 16:47:25.669] [Application-akka.actor.default-dispatcher-1] [
akka://Application/user/$a] Messagefrom Server WARNING arguments left: 1

需要帮助,因为我想在作业截止日期之前完成

谢谢大家

【问题讨论】:

    标签: java playframework-2.0 akka future


    【解决方案1】:

    “arguments left: 1”警告是由于以下行:

    log.info("Messagefrom Server", result.toString())
    

    您将未使用的参数传递给记录器。应该是这样的:

    log.info("Messagefrom Server {}", result.toString())
    

    【讨论】:

    • 这应该是最好的答案
    【解决方案2】:

    尝试在 Play 中为您的演员命名:

    ActorRef localNode = csystem.actorOf(new Props(LocalNode.class), "localNode");
    

    另外还要注意,如果你需要从 Play 访问 Akka 系统,最好使用:

    ActorSystem csystem = Akka.system();
    

    代替:

    ActorSystem csystem = ActorSystem.create("Application", ConfigFactory.load().getConfig("LocalNode"));
    

    【讨论】:

      猜你喜欢
      • 2015-02-15
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-09
      • 1970-01-01
      相关资源
      最近更新 更多