놀이 프레임 워크와 함께 Akka 미래
-
11-12-2019 - |
문제
Remote Akka System에 연결하기 위해 Play 프레임 워크를 사용하여 Akka 미래를 사용하려고합니다. ...에시스템을 실행 한 후 Akka Future가 한 명의 인수가 남아 있음을 경고합니다.
코드는 다음과 같습니다.
이것은 [Lay Controller 코드 : 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"));
}
}
.
이것은 재생 프레임 워크 로컬 배우 노드 입니다.
패키지 컨트롤러;
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 시스템 마스터 니드 입니다.
.
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");
}
}
}
이것은 Play Framewrok 의 메시지입니다.
.
[INFO] [09/30/2012 16:47:25.669] [Application-akka.actor.default-dispatcher-1] [
akka://Application/user/$a] Messagefrom Server WARNING arguments left: 1
도움말이 필요합니다. 나는 과제 마감일을 충족시키는 것으로 가정합니다
모든 덕분에
해결책
재생 중에 배우에게 이름을 지정하십시오 :
ActorRef localNode = csystem.actorOf(new Props(LocalNode.class), "localNode");
.
또한 AKKA 시스템에 AKKA 시스템에 액세스 해야하는 경우 다음과 같습니다.
ActorSystem csystem = Akka.system();
.
대신 :
ActorSystem csystem = ActorSystem.create("Application", ConfigFactory.load().getConfig("LocalNode"));
. 다른 팁
"LESTEMENGE : 1"경고는 다음 줄로 인해
log.info("Messagefrom Server", result.toString())
.
미사용 매개 변수를 로거에 전달하고 있습니다.대신 이에 있어야합니다 :
log.info("Messagefrom Server {}", result.toString())
.