我正在运行Java(1.6)中的akka​​远程(2.0.2)的示例示例,并且没有从远程获取结果。 看来我的本地节点无法连接到远程笔记。

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"
            }
        }
    }
}

}


远程节点代码-

远程节点应用

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

}

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

}


我正在本地节点上开始播放“运行9000”,并在远程上开始播放“运行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远程处理?

#1楼 票数:0 已采纳

远程应用程序需要作为jar部署在Akka微内核中。 远程应用程序启动后,您可以运行本地应用程序以连接到远程应用程序。 write2munish回答

  ask by Santosh translate from so

未解决问题?本站智能推荐:

1回复

使用Akka远程系统播放2.0.2

我正在使用Akka 2和Play 2.0.2。 我想将Play Framewrok连接到远程Akka系统。 我已经完成了actor的远程配置和远程引用,但是任何时候我尝试将play framewrok连接到Akka远程系统时。 我在下面的代码段中遇到错误。 播放应用程序中的代码。
1回复

更新至播放2.0.2-akka远程actor已使用的地址

我正在将应用程序更新为播放2.0.2。 部署Akka远程角色时出现问题: 在应用程序启动时调用以下代码: 在application.conf中进行此配置时: 相同的设置可以在play-2.0.1上正常运行。 是否需要对play-2.0.2进行一些配置更改?
1回复

将Play 2框架与Akka远程系统连接起来

我正在尝试将远程akka系统连接到播放框架,看起来我遇到了配置问题。 我有一个Play框架控制器类和一个Akka actor,下面的本地对象是代码: 当我运行时,网页上会显示以下消息 这是控制器: 这是LOcal Akka的演员 这是本地播放配置文件
1回复

Scala / Play / Akka:从远程应用程序到应用程序的通信

如果我在不同的服务器上有两个Scala / Play应用程序,那么它们以双向方式发送少量数据的最佳通讯方式是什么? RESTful方法 Akka远程演员 还有吗 我最初考虑的是Akka远程角色,但是我找不到一个问题的答案:在这种情况下如何处理两个应用程序之间的授
3回复

发现集群中的Akka演员

我最近一直试图围绕Akka和基于演员的系统的概念。 虽然我对Akka的基本原理有很好的理解,但现在我仍然在集群和远程演员方面遇到一些问题。 我将尝试使用Play Framework 2.0附带的WebSocket聊天示例来说明问题:有一个持有WebSockets并保留当前连接用户列表的a
1回复

分布式播放框架应用程序中的远程actor系统之间的交叉通信

我正在尝试找出构建应用程序的最佳方法,以便可以以冗余方式从播放框架应用程序发送推送通知。 我想实现“休息期”,以便在用户修改数据30秒后将推送通知发送到移动设备。 如果用户在30秒钟内进行了另一个修改,则需要取消原始通知,并用新的通知替换,该通知应在最近的修改后30秒发送,依此类推。
1回复

Heroku中的Akka调度与Play 2框架

我无法让Akka调度方法在Heroku中正常工作。 它在本地工作正常,并打印出“Heartbeat”到日志。 这是有问题的文件: https : //github.com/magnusart/actor-test/blob/master/app/Global.scala和下面的代码段。
2回复

在scala中实现长轮询并使用akka播放2.0

我正在分布式环境中在Play 2.0中实现长轮询。 我理解的方式是,当Play获取请求时,它应该暂停更新的待处理通知,然后转到数据库以获取新数据并重复。 我开始查看Play 2.0提供的聊天示例,但它是在websocket中。 此外,它看起来不像是能够分发。 所以我想我会用Akka的赛车