나는 새로운 akka 원격을 보내는 메시지를 원격 배우 응답을 얻을에서 돌아갑니다. 가 2 배우 시스템에 localhost-서로 다른 포트:큰 미고 WorkerSystem. 내가 만든 에서 배우 WorkerSystem 시도했 메시지를 보내는 원격 주소입니다. 하지만 난 계속에는'죽은자가 발생했'메시지! 감사하겠습니다. 감사합니다!
MainMaster.java
package pi_swarm_approx;
import akka.actor.ActorRef;
import akka.actor.ActorSelection;
import akka.actor.ActorSystem;
import akka.actor.UntypedActor;
import com.typesafe.config.ConfigFactory;
public class MainMaster extends UntypedActor{
ActorSystem system;
ActorRef actor;
ActorSelection remoteActor;
public MainMaster() {
system = ActorSystem.create("MasterSystem", ConfigFactory.load("master"));
System.out.println("MasterSystem created");
MainWorker mw = new MainWorker();
System.out.println("MainWorker obj created");
remoteActor = mw.system.actorSelection("akka://WorkerSystem@localhost:2552/user/workerActor");
System.out.println("Remote actor created");
remoteActor.tell("hello", getSelf());
System.out.println("Message sent to remote actor");
}
public void onReceive(Object msg) {
if (msg != null) {
System.out.println("Got it back");
}
else {
unhandled(msg);
getContext().stop(getSelf());
}
}
}
MainWorker.java
package pi_swarm_approx;
import akka.actor.ActorSystem;
import akka.actor.ActorRef;
import com.typesafe.config.ConfigFactory;
import akka.actor.Props;
public class MainWorker {
ActorSystem system;
ActorRef actor;
public MainWorker() {
this.system = ActorSystem.create("WorkerSystem", ConfigFactory.load("worker"));
actor = system.actorOf(Props.create(Worker.class), "workerActor");
}
}
Worker.java
package pi_swarm_approx;
import akka.actor.UntypedActor;
public class Worker extends UntypedActor {
public void onReceive(Object msg) {
System.out.println("Worker actor got message");
if (msg != null) {
getSender().tell("Request processed", getSelf());
}
else {
unhandled(msg);
}
getContext().stop(getSelf());
}
}
마스터입니다.conf
akka {
actor {
provider = "cluster"
}
remote {
transport = ["akka.remote.netty.tcp"]
netty.tcp {
hostname = "localhost"
port = 2551
}
}
clustering {
cluster.name = "MasterSystem"
role = "master"
}
}
노동자입니다.conf
akka {
actor {
provider = "cluster"
deployment {
/workerActor {
remote = "akka.tcp://WorkerSystem@localhost:2552"
}
}
}
출력
In main
MasterSystem created
MainWorker obj created
Remote actor created
Message sent to remote actor
[INFO] [11/22/2021 16:01:34.531] [WorkerSystem-akka.actor.default-dispatcher-5] [akka://WorkerSystem/deadLetters] Message [java.lang.String] from Actor[akka://Main/user/app#402333018] to Actor[akka://WorkerSystem/deadLetters] was not delivered. [1] dead letters encountered. If this is not an expected behavior, then [Actor[akka://WorkerSystem/deadLetters]] may have terminated unexpectedly, This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'.
<=========----> 75% EXECUTING [18s]