0

akka remoting (2.0.2) のサンプル例を Java (1.6) で実行していますが、リモートから結果が得られません。ローカル ノードがリモート ノートに接続できないようです。

LocalNodeApplication コードはローカル システム上にあり、RemoteNodeApplication コードはリモート システム上にあります。

コードを参照してください:

ローカル ノード -

public class LocalNodeApplication extends Controller {

public static Result process(String msg) throws Exception {

    ActorSystem _system = ActorSystem.create("LocalNodeApp", ConfigFactory.load().getConfig("LocalSys"));
    ActorRef localActor = _system.actorOf(new Props(LocalActor.class));

    localActor.tell("Hello");

    Thread.sleep(5000);
    _system.shutdown();

    return ok("success");
}

}

LocalActor コード:

public class LocalActor extends UntypedActor {
LoggingAdapter log = Logging.getLogger(getContext().system(), this);
Timeout timeout = new Timeout(Duration.parse("5 seconds"));

ActorRef remoteActor;

@Override
public void preStart() {
    //Get a reference to the remote actor

    remoteActor = getContext().actorFor("akka://RemoteNodeApp@192.168.0.85:9002/user/remoteActor");
}

@Override
public void onReceive(Object message) throws Exception {
    Future<Object> future = Patterns.ask(remoteActor, message.toString(), timeout);

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

    log.info("Message received from Server -> {}", result);

    /*remoteActor.tell(message.toString());*/
}

}

LocalSys 構成:

LocalSys {
akka {
    actor {
        provider = "akka.remote.RemoteActorRefProvider"
        deployment {
            /remoteActor {
                remote = "akka://RemoteNodeApp@192.168.0.85:9002"
            }
        }
    }
}

}


リモート ノード コード -

RemoteNodeApplication

public class RemoteNodeApplication implements Bootable {

final ActorSystem system = ActorSystem.create("RemoteNodeApp", ConfigFactory.load().getConfig("RemoteSys"));

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

public void startup() {     
    system.actorOf(new Props(RemoteActor.class), "remoteActor");
}

}

リモートアクター :

public class RemoteActor 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");
    }
}

}

RemoteSys 構成 -

RemoteSys {
akka {
    actor {
        provider = "akka.remote.RemoteActorRefProvider"
    }
    remote {
        untrusted-mode = on
        transport = "akka.remote.netty.NettyRemoteTransport"
        netty {
            hostname = "192.168.0.85"
            port = 9002
        }
    }
}

}


ローカルノードで「run 9000」を開始し、リモートで「run 9002」を開始しています。

以下の例外が発生しています:

[INFO] [09/17/2012 17:42:52.206] [play-akka.actor.actions-dispatcher-1] [ActorSystem(LocalNodeApp)] REMOTE: RemoteServerStarted@akka://LocalNodeApp@127.0.0.1:2552
[INFO] [09/17/2012 17:42:52.406] [LocalNodeApp-akka.actor.default-dispatcher-4] [ActorSystem(LocalNodeApp)] REMOTE: RemoteClientStarted@akka://RemoteNodeApp@192.168.0.85:9002
[INFO] [09/17/2012 17:42:52.438] [LocalNodeApp-akka.actor.default-dispatcher-1] [ActorSystem(LocalNodeApp)] REMOTE: RemoteClientShutdown@akka://RemoteNodeApp@192.168.0.85:9002
[ERROR] [09/17/2012 17:42:57.281] [LocalNodeApp-akka.actor.default-dispatcher-4] [akka://LocalNodeApp/user/$a] Timed out
    akka.pattern.AskTimeoutException: Timed out
        at akka.dispatch.DefaultPromise.result(Future.scala:875)
        at akka.dispatch.Await$.result(Future.scala:74)
        at akka.dispatch.Await.result(Future.scala)
        at com.localNodeApp.LocalActor.onReceive(LocalActor.java:30)
        at akka.actor.UntypedActor$$anonfun$receive$1.apply(UntypedActor.scala:154)
        at akka.actor.UntypedActor$$anonfun$receive$1.apply(UntypedActor.scala:153)
        at akka.actor.Actor$class.apply(Actor.scala:318)
        at akka.actor.UntypedActor.apply(UntypedActor.scala:93)
        at akka.actor.ActorCell.invoke(ActorCell.scala:626)
        at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:197)
        at akka.dispatch.Mailbox.run(Mailbox.scala:179)
        at akka.dispatch.ForkJoinExecutorConfigurator$MailboxExecutionTask.exec(AbstractDispatcher.scala:516)
        at akka.jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:259)
        at akka.jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:975)
        at akka.jsr166y.ForkJoinPool.runWorker(ForkJoinPool.java:1479)
        at akka.jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)
Caused by: akka.pattern.AskTimeoutException: Timed out
        at akka.pattern.PromiseActorRef$$anonfun$1.apply$mcV$sp(AskSupport.scala:274)
        at akka.actor.DefaultScheduler$$anon$6$$anon$7.run(Scheduler.scala:183)
        at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:94)
        at akka.jsr166y.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1381)
        ... 4 more
 [INFO] [09/17/2012 17:42:57.318] [LocalNodeApp-akka.actor.default-dispatcher-4] [ActorSystem(LocalNodeApp)] REMOTE: RemoteServerShutdown@akka://LocalNodeApp@127.0.0.1:2552

ローカル ノードとリモート ノードの両方のローカル システムで同じ例を実行している場合 (この変更された IP アドレスをローカル システムに)、コンソールで以下の行を取得します。

[INFO] [09/17/2012 17:42:52.206] [play-akka.actor.actions-dispatcher-1] [ActorSystem(LocalNodeApp)] REMOTE: RemoteServerStarted@akka://LocalNodeApp@127.0.0.1:2552
[INFO] [09/17/2012 17:42:52.406] [LocalNodeApp-akka.actor.default-dispatcher-4] [ActorSystem(LocalNodeApp)] REMOTE: RemoteClientStarted@akka://RemoteNodeApp@192.168.0.85:9002
[INFO] [09/17/2012 17:42:52.438] [LocalNodeApp-akka.actor.default-dispatcher-1] [ActorSystem(LocalNodeApp)] REMOTE: RemoteClientShutdown@akka://RemoteNodeApp@192.168.0.85:9002
[INFO] [09/17/2012 17:42:57.318] [LocalNodeApp-akka.actor.default-dispatcher-4] [ActorSystem(LocalNodeApp)] REMOTE: RemoteServerShutdown@akka://LocalNodeApp@127.0.0.1:2552

これについて私を案内してください。akka remoting の正しい手順に従っていますか?

4

1 に答える 1

0

リモートアプリケーションは、akka マイクロカーネルに jar としてデプロイする必要があります。リモート アプリケーションが起動したら、ローカル アプリケーションを実行してリモート アプリに接続できます。write2munish の回答

于 2012-09-19T15:54:11.367 に答える